So che posso svn diff -r a:b repo
visualizzare le modifiche tra le due revisioni specificate. Quello che vorrei è un diff per ogni revisione che ha cambiato il file. Tale comando è disponibile?
So che posso svn diff -r a:b repo
visualizzare le modifiche tra le due revisioni specificate. Quello che vorrei è un diff per ogni revisione che ha cambiato il file. Tale comando è disponibile?
Risposte:
Non esiste un comando integrato per questo, quindi di solito faccio solo una cosa del genere:
#!/bin/bash
# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {
# first revision as full text
echo
read r
svn log -r$r $url@HEAD
svn cat -r$r $url@HEAD
echo
# remaining revisions as differences to previous revision
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
Quindi, puoi chiamarlo con:
history_of_file $1
svn: '.' is not a working copy svn: Syntax error in revision argument '@HEAD' svn: Syntax error in revision argument '@HEAD'
svn log --diff [path_to_file]
funziona esattamente così! stackoverflow.com/a/24938573/3185510
Leggermente diverso da quello che hai descritto, ma penso che questo potrebbe essere ciò di cui hai effettivamente bisogno:
svn blame filename
Stampa il file con ogni riga preceduta dal tempo e dall'autore del commit che lo ha modificato per ultimo.
Se vuoi vedere l'intera cronologia di un file con modifiche al codice:
svn log --diff [path_to_file] > log.txt
--diff
poiché ha dei test per l'opzione mentre 1.7.3 non ne ha - subversion/tests/cmdline/log_tests.py
.
--limit <number>
opzione. In questo modo:svn log --diff --limit 5 [path_to_file]
È possibile utilizzare git-svn
per importare il repository in un repository Git, quindi utilizzare git log -p filename
. Questo mostra ogni voce del registro per il file seguita dal corrispondente diff.
git log X..Y -o filename
Iniziare con
svn log -q file | grep '^r' | cut -f1 -d' '
Verrà visualizzato un elenco di revisioni in cui è stato modificato il file, che è quindi possibile utilizzare per eseguire lo script delle chiamate ripetute svn diff
.
svn log -q some_file.xxx | grep ^r | awk '{print $1}' | sed -e 's/^r//' | xargs -i svn diff -rHEAD:{} some_file.xxx > ~/file_history.txt
bel piccolo one-liner (awk fa lo stesso del taglio)
Il comando "biasimo" stranamente chiamato fa questo. Se usi Tortoise, ti dà una finestra di dialogo "dalla revisione", quindi un elenco di file con un indicatore riga per riga del numero di revisione e autore accanto ad esso.
Se fai clic con il pulsante destro del mouse sulle informazioni di revisione, puoi visualizzare una finestra di dialogo "Mostra registro" che fornisce informazioni complete sul check-in, insieme ad altri file che facevano parte del check-in.
Per quanto ne so, non esiste un comando svn incorporato per ottenere questo risultato. Dovresti scrivere uno script per eseguire diversi comandi per creare tutte le differenze. Un approccio più semplice sarebbe quello di utilizzare un client svn GUI se questa è un'opzione. Molti di essi come il plug-in sovversivo per Eclipse elencheranno la cronologia di un file e ti permetteranno di visualizzare il diff di ogni revisione.
Grazie Bendin. Mi piace molto la tua soluzione.
L'ho modificato per funzionare in ordine inverso, mostrando prima le modifiche più recenti. Il che è importante con un codice di vecchia data, mantenuto per diversi anni. Di solito lo installo di più.
svnhistory elements.py |more
Ho aggiunto -r all'ordinamento. Ho rimosso le specifiche. gestione per "primo record". È errore sull'ultima voce, poiché non c'è nulla con cui diffonderlo. Anche se ci sto vivendo perché non scendo mai così lontano.
#!/bin/bash
# history_of_file
#
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs. The first revision of the file is emitted as
# full text since there's not previous version to compare it to.
#
# Dlink
# Made to work in reverse order
function history_of_file() {
url=$1 # current url of file
svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
while read r
do
echo
svn log -r$r $url@HEAD
svn diff -c$r $url@HEAD
echo
done
}
}
history_of_file $1
Ho visto un sacco di risposte parziali durante la ricerca di questo argomento. Questo è ciò che ha funzionato per me e spero che aiuti gli altri. Questo comando visualizzerà l'output sulla riga di comando, mostrando il numero di revisione, l'autore, il timestamp di revisione e le modifiche apportate:
svn blame -v <filename>
Per semplificare la tua ricerca, puoi scrivere l'output in un file e grep per quello che stai cercando.