Ist es möglich, den Verlauf von Änderungen an einer bestimmten Codezeile in einem Subversion-Repository anzuzeigen?
Ich möchte zum Beispiel sehen können, wann eine bestimmte Anweisung hinzugefügt oder wann diese Anweisung geändert wurde, auch wenn ihre Zeilennummer nicht mehr dieselbe ist.
Im TortoiseSVN- Client gibt es eine sehr schöne Funktion, mit der Sie:
Das zweite Feature macht das, was es sagt - es zeigt die kommentierte Revision vor der letzten Änderung der Zeile. Wenn Sie diese Funktion iterativ verwenden, können Sie den Verlauf einer bestimmten Zeile zurückverfolgen.
quelle
Ich würde normalerweise:
svn blame FILE
Zuerst ausführen .Führen Sie eine weitere Abfrage mit dem
-r
Argument durch:quelle
svn annotate $file_path | head -n$line_no | tail -1 | awk '{print $1}'
Dies kann in zwei Schritten erfolgen:
svn blame /path/to/your/file > blame.tmp
grep "your_line_of_text" blame.tmp
Sie können die Datei tad.tmp anschließend löschen, wenn Sie sie nicht benötigen.
Grundsätzlich kann ein einfaches Skript in jeder Skriptsprache geschrieben werden, die ungefähr dasselbe tut.
quelle
Der Schlüssel hier ist, wie viel Geschichte benötigt wird. Wie andere betont haben, lautet die kurze Antwort:
svn blame
(siehesvn help blame
Einzelheiten ). Wenn Sie weit in die Vergangenheit zurückreichen oder sich mit wesentlichen Änderungen befassen, benötigen Sie wahrscheinlich mehr als nur diesen einen Befehl.Ich musste das nur selbst machen und fand diesen (ye ole) Thread hier auf SO. Hier ist, was ich getan habe, um es mit nur dem zu lösen
CLI
, speziell für meinen Fall, in dem sich eine API geändert hatte (z. B. während die weit veraltete Arbeit einer Person (nicht auf einem Zweig, arrgh! ) Zurück in einen Feature-Zweig portiert wurde , der auf einem bis zu Datumsstamm). ZB hatten sich die Funktionsnamen so weit geändert, dass nicht ersichtlich war, welche Funktion aufgerufen werden musste.Schritt eins
Mit dem folgenden Befehl konnte ich durch Commits blättern, bei denen sich in der Datei "fileName.h" Änderungen ergeben hatten, und die entsprechende Versionsnummer anzeigen (Hinweis: Möglicherweise müssen Sie die '10' für mehr oder weniger Kontext gemäß Ihrem SVN-Protokolltext ändern ).
svn log | grep -C 10 "fileName.h" | less
Dies führt zu einer Liste von Revisionen, in denen diese Datei geändert wurde.
Schritt zwei
Dann war es eine einfache Sache,
blame
(oder wie andere betont habenannotate
) zu verwenden, um sich auf die Revisionen des Interesses zu beschränken.ZB fand die Revision des Interesses 35948.
Schritt drei
Nachdem die interessierende (n) Revision (en) über die Schuld gefunden wurden, kann ein Diff erstellt werden, um das SVN-Tool zu nutzen.
Fazit
Ein visueller Unterschied machte es viel einfacher, die alten API-Namen mit den neueren / aktualisierten API-Namen zu identifizieren.
quelle
grep
dem alten API- / Funktionsnamen suchen und einen Kommentar finden, der etwa " func_FindParm in func_GetParm geändert " enthält. .In Eclipse können Sie mithilfe der SVN-Annotationsansicht feststellen, wann jede Zeile Ihres Codes festgeschrieben wurde, oder mit der rechten Maustaste auf die Datei → Team → Annotation anzeigen ... klicken .
quelle
Die AKA SVN Schuld von TortoiseSVN .
quelle
svn tad zeigt Ihnen, welches Check-in beim letzten Mal eine Zeile in einer Datei geändert hat.
Dies funktioniert auch bei alten Revisionen.
quelle
Ein Start ist der Befehl svn tadeln (oder kommentieren, loben). Es zeigt Ihnen, wann eine Codezeile zuletzt geändert wurde und von wem sie geändert wurde. z.B:
quelle
Wenn Sie Emacs verwenden, kann das integrierte Paket
vc
dies tun.vc-annotate
mit entweder M-xvc-annotate
oder aus C-xvg.svn blame
.vc-annotate-revision-previous-to-line
) wird zur Revision vor der Revision in der Zeile navigiert, in der Sie sich befinden.quelle
Der Befehl, den Sie suchen, ist
svn blame
.quelle