Quando eseguo svn commit e lascia che il mio editor svn lo prenda Mi piacerebbe che l'editor svn mostri il diff dei file che sono cambiati invece della sola lista di file. Aiuta davvero a fare jogging nella memoria durante la scrittura di messaggi di commit dettagliati. Qualche idea su come realizzare?Make SVN Commit stampa anche il diff
risposta
Sembra che lo script qui funzioni, dopo tutto.
Da - http://push.cx/2007/seeing-subversion-diffs-for-commit-messages
necessari per fare un paio di modifiche.Io incollare l'intero script qui
creare un file, il nome è svn in questo caso è messo in ~/bin
#!/bin/sh
REALSVN=/usr/bin/svn
ARGS="[email protected]"
if [ "$1" = "commit" -o "$1" = "ci" ]; then
shift # pop off $1 for diff
TEMPLATE=`mktemp -t tmp`
$REALSVN diff "[email protected]" > "$TEMPLATE"
$REALSVN $ARGS --editor-cmd="~/bin/svn-diff-editor '$TEMPLATE'"
else
$REALSVN $ARGS
fi
e anche creare un file chiamato ~/bin/svn-diff-editore
echo >> "$2"
cat "$1" >> "$2"
rm "$1"
$SVN_EDITOR "$2"
per OSX ho dovuto aggiungere il '-t tmp' per mktmp e lo script orig avuto $ visivo che non ho avuto e aveva $ SVN_EDITOR impostato, invece, una volta che ho cambiato l'ultima linea di svn-diff -editor a che ha funzionato.
Devo notare che entrambi i file devono essere chmod + x'd e ~/bin dovrebbero essere i primi nel tuo percorso ... o semplicemente metterlo ovunque sia prima del svn reale nel tuo percorso – dstarh
scrivere uno script
Ci vorrebbe un po 'di lavoro, ma si potrebbe scrivere uno script per front end come SVN_EDITOR. Quando svn
richiama SVN_EDITOR, passa il nome di un file di commento temporaneo svn generato contenente l'elenco di riepilogo dei file interessati da eseguire.
http://svnbook.red-bean.com/en/1.5/svn-book.html#svn.advanced.externaleditors
The value of any of these options or variables is the beginning of a command line to be executed by the shell. Subversion appends to that command line a space and the pathname of a temporary file to be edited. So, to be used with Subversion, the configured or specified editor needs to support an invocation in which its last command-line parameter is a file to be edited, and it should be able to save the file in place and return a zero exit code to indicate success.
In teoria, si potrebbe scrivere uno script di shell che prende un parametro di nome di file che:
- apre il file indicato dall'ultimo arg (lo svn commento file temporaneo)
- lo analizza per i file da impegnare
- esegue
svn diff
su ogni file modificato (non binario) e aggiunge i di uscita ff di nuovo alla fine del file commento temporanea svn - invoca il tuo vero editor sul file commento svn temporanei modificato
Assicurati che il tuo script restituisce il codice di ritorno restituito dal tuo vero editore o 0 per indicare il successo . Quindi imposta SVN_EDITOR env var in modo che punti al tuo script.
Forse qualcuno ha già scritto un tale script, ma non sono riuscito a trovarne uno (soprattutto dal momento che non hai indicato un sistema operativo). C'è anche una buona possibilità che questo script possa generare un file estremamente grande.
Alternativa - scrivere una macro
penso che una migliore alternativa sarebbe quella di utilizzare un editor programmabile e programmare una macro che leggere il nome del file (s) da qualche linea selezionata (s) e quindi eseguire svn diff sul file (s) - mettendo i risultati in un buffer o accodandolo al buffer corrente. È quindi possibile evidenziare selettivamente i file dal file di commento temporaneo svn ed eseguire SVN diff sui soli file chiave necessari. Sembra un lavoro per l'elisp!
Spiacente, non ho un codice pronto per voi. Se fai una di queste cose, sarebbe interessante vedere tornare e pubblicare il tuo script/macro qui come risposta.
ho scritto un semplice script e impostare SVN_EDITOR
al suo percorso:
#!/bin/bash
tmpFile="${!#}"
# Append changes in committed files to tmpFile
echo >> ${tmpFile}
grep '^[MR]' ${tmpFile} | awk '{print $2}' | \
xargs -n 1 --no-run-if-empty svn diff >> ${tmpFile}
# Run editor
exec ${EDITOR} ${tmpFile}
Nota che sembra solo per modificato (M) e file sostituiti (R) e assume EDITOR
è impostato. Probabilmente non dovrebbe provare a diffare i file binari.
soluzione interessante. Mi piace molto l'output diff di default di SVN che è quello che volevo - il solito output di commit elenca solo i file e lo stato, ma svn diff ti fornirà il corretto layout di diff senza dover chiamare svn diff su ogni file separatamente. – dstarh
Non sono riuscito a trovare una risposta che mi sembrava di usare. La risposta di dstarh è quasi arrivata. Ma è troppo invadente per me. Cosa succede se ci sono argomenti prima di commit
? Inoltre, è più sicuro eliminare il file temporaneo con una trap. E per compiacere la gente paranoica, scappo l'editor di cmd:
svn-commit.sh
:
#!/usr/bin/env bash
set -eu
tmp=`mktemp` _trap="rm -r "$tmp"; ${_trap:-}" && trap "$_trap" EXIT
svn diff "[email protected]" > "$tmp"
# svn diff "[email protected]" | iconv -f utf-8 -t utf-8 -c > "$tmp" # skip malformed UTF-8 characters
svn commit "[email protected]" "--editor-cmd=svn-editor.sh $(printf %q "$tmp")"
svn-editor.sh
:
#!/usr/bin/env bash
set -eu
diff_f=$1
commit_msg_f=$2
# dos2unix "$diff_f" # if svn repo has files with different line-ending styles
# dos2unix -f "$diff_f" # to make it always treat diff output as text
echo >> "$commit_msg_f"
cat "$diff_f" >> "$commit_msg_f"
"$EDITOR" "$commit_msg_f"
UPD Ho eseguito in questo errore:
svn: E135000: Commit failed (details follow):
svn: E135000: Error normalizing edited contents to internal format
svn: E135000: Inconsistent line ending style
svn: E135000: Your commit message was left in a temporary file:
svn: E135000: '.../svn-commit.tmp'
Si potrebbe considerare addi ng dos2unix
comando o qualcosa come fatto nel commento.
UPD Inoltre, si consiglia di skip malformed UTF-8 characters, altrimenti svn fallirà:
svn: E000022: Commit failed (details follow):
svn: E000022: Error normalizing edited contents to internal format
svn: E000022: Valid UTF-8 data
(hex: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0a 2b 0a 2b)
followed by invalid UTF-8 sequence
(hex: a4 20 3d 20)
svn: E000022: Your commit message was left in a temporary file:
svn: E000022: '.../svn-commit.tmp'
UPD E di tanto in tanto dos2unix
potrebbe trattare diff
uscita in formato binario:
dos2unix: Binary symbol 0x00 found at line 742308
dos2unix: Skipping binary file /tmp/tmp.UCNcubZZlX
svn: E135000: Commit failed (details follow):
svn: E135000: Error normalizing edited contents to internal format
svn: E135000: Inconsistent line ending style
svn: E135000: Your commit message was left in a temporary file:
svn: E135000: '.../svn-commit.tmp'
Si può vuoi forzare la conversione.
- 1. Ottenere svn diff per mostrare la funzione C++ durante il commit
- 2. Uso del comando svn diff
- 3. SVN Regolamenti di commit
- 4. SVN commit problema
- 5. git memorizza informazioni diff negli oggetti commit?
- 6. svn: E000002: Commit non riuscito
- 7. Come ottenere NESSUN contesto quando si usa svn diff
- 8. Strumento Git diff su più commit con l'altro commit tra
- 9. git - riassunto del file modificato come svn diff --summarize/svn stato dalla console (senza gitk)
- 10. svn diff quando i file sono contrassegnati con "cronologia programmata con commit"
- 11. svn commit su più repository
- 12. SVN atomic commit how-to
- 13. Git Diff tra HEAD e SVN Master
- 14. Come applicare SVN diff a Git?
- 15. Divisione Git diff in un nuovo commit
- 16. Diff tra file singoli tra due commit
- 17. Include il file immagine nella patch svn diff
- 18. SVN crea una patch dal codice di commit?
- 19. Accesso a '/ svn/ctm /! Svn/me' vietato Quando si esegue il commit al server svn?
- 20. Come posso ottenere il diff tra tutti i commit avvenuti tra due date con Git?
- 21. SVN post-commit - permesso negato per .svn/bloccare
- 22. Come forzare il diff veloce di Eclipse per l'aggiornamento dopo un commit?
- 23. Combina locale Git commit in un commit per git-svn
- 24. Stampa messaggio di commit di un dato commit in git
- 25. svn update e commit smesso di funzionare
- 26. SVN Commit non riuscito, accesso vietato
- 27. Come fare svn commit come utente diverso?
- 28. commit SVN con data/ora precedente
- 29. trigger Hudson generazione quando svn commit
- 30. svn: Come annullare una fusione (senza commit)?
Con TortoiseSVN (e molti altri) è possibile fare doppio clic su qualsiasi file in tale elenco per vedere una diff. Puoi anche selezionare più e fare clic con il pulsante destro del mouse su diff. – JoshD
sto parlando con la riga di comando su un terminale in cui ho impostato la proprietà SVN_EDITOR e indico sia a vim che a textmate che fanno l'evidenziazione automatica della sintassi per il commit o diff a seconda di quale i pipe a esso. – dstarh
@Josh posso facilmente svn diff | accoppiarsi e vedere il diff di tutto ciò che è cambiato ma quando scrivo svn commit e mate o vim carica attualmente mostra solo un elenco di file tramite lo stato di svn, mi piacerebbe molto di seguito per vedere l'output di svn diff – dstarh