Ich weiß, dass ich svn diff -r a:b repo
die Änderungen zwischen den beiden angegebenen Revisionen anzeigen kann . Was ich möchte, ist ein Unterschied für jede Revision, die die Datei geändert hat. Ist ein solcher Befehl verfügbar?
Ich weiß, dass ich svn diff -r a:b repo
die Änderungen zwischen den beiden angegebenen Revisionen anzeigen kann . Was ich möchte, ist ein Unterschied für jede Revision, die die Datei geändert hat. Ist ein solcher Befehl verfügbar?
Antworten:
Es gibt keinen eingebauten Befehl dafür, also mache ich normalerweise einfach so etwas:
#!/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
}
}
Dann können Sie es nennen mit:
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]
funktioniert genau so! stackoverflow.com/a/24938573/3185510
Etwas anders als das, was Sie beschrieben haben, aber ich denke, das könnte das sein, was Sie tatsächlich brauchen:
svn blame filename
Die Datei wird mit jeder Zeile gedruckt, der die Zeit und der Autor des Commits vorangestellt sind, der sie zuletzt geändert hat.
Wenn Sie den gesamten Verlauf einer Datei mit Codeänderungen anzeigen möchten:
svn log --diff [path_to_file] > log.txt
--diff
da es Tests für die Option gibt, während 1.7.3 keine hat - subversion/tests/cmdline/log_tests.py
.
--limit <number>
Option. Wie so:svn log --diff --limit 5 [path_to_file]
Sie können git-svn
das Repository verwenden, um es in ein Git-Repository zu importieren, und dann verwenden git log -p filename
. Dies zeigt jeden Protokolleintrag für die Datei, gefolgt vom entsprechenden Diff.
git log X..Y -o filename
Beginnen mit
svn log -q file | grep '^r' | cut -f1 -d' '
Dadurch erhalten Sie eine Liste der Revisionen, in denen sich die Datei geändert hat, mit denen Sie wiederholte Aufrufe per Skript ausführen können 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
netter kleiner
Der seltsam benannte Befehl "Schuld" tut dies. Wenn Sie Tortoise verwenden, wird ein Dialogfeld "Von Revision" angezeigt. Anschließend wird eine Datei mit einer zeilenweisen Anzeige der Revisionsnummer und des Autors angezeigt.
Wenn Sie mit der rechten Maustaste auf die Revisionsinformationen klicken, können Sie ein Dialogfeld "Protokoll anzeigen" aufrufen, in dem alle Informationen zum Einchecken sowie andere Dateien, die Teil des Eincheckens waren, angezeigt werden.
Soweit ich weiß, gibt es keinen eingebauten svn-Befehl, um dies zu erreichen. Sie müssten ein Skript schreiben, um mehrere Befehle zum Erstellen aller Unterschiede auszuführen. Ein einfacherer Ansatz wäre die Verwendung eines GUI-SVN-Clients, wenn dies eine Option ist. Viele von ihnen, wie das subversive Plugin für Eclipse, listen den Verlauf einer Datei auf und ermöglichen es Ihnen, den Unterschied jeder Revision anzuzeigen.
Danke, Bendin. Ihre Lösung gefällt mir sehr gut.
Ich habe es so geändert, dass es in umgekehrter Reihenfolge funktioniert, wobei zuerst die letzten Änderungen angezeigt wurden. Was bei langjährigem Code wichtig ist, der über mehrere Jahre gepflegt wird. Normalerweise pfeife ich es in mehr.
svnhistory elements.py |more
Ich habe der Sortierung -r hinzugefügt. Ich habe spec entfernt. Behandlung für 'erste Aufzeichnung'. Es ist ein Fehler beim letzten Eintrag, da es nichts gibt, womit es sich unterscheiden könnte. Obwohl ich damit lebe, weil ich nie so weit runter komme.
#!/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
Ich habe bei der Recherche zu diesem Thema eine Reihe von Teilantworten gesehen. Das hat bei mir funktioniert und ich hoffe, es hilft anderen. Dieser Befehl zeigt die Ausgabe in der Befehlszeile mit der Revisionsnummer, dem Autor, dem Revisionszeitstempel und den vorgenommenen Änderungen an:
svn blame -v <filename>
Um Ihre Suche zu vereinfachen, können Sie die Ausgabe in eine Datei schreiben und nach dem suchen, wonach Sie suchen.