Können Sie svn diff mit Anmerkungen oder Schuldzuweisungen versehene Informationen hinzufügen, sodass für jede geänderte Zeile angegeben wird, welcher Benutzer und welche Revision diese Zeile geändert haben?
Ein Annotate-Diff, das die Revisionen 8-10 vergleicht, könnte beispielsweise Folgendes ausgeben:
9 user1 - some line that user1 deleted in revision 9
10 user2 + some line that user2 added in revision 10
Der Kontext, Linien um ihn herum, die sich nicht geändert haben, kann ebenfalls enthalten sein oder nicht, spielt keine Rolle.
Es geht nicht nur darum, "schnell" ein Shell-Skript zu schreiben, das die Ausgabe von svn diff und svn annotate kombiniert. Mit Annotate wird beispielsweise nie angezeigt, wer eine Zeile entfernt hat. Es geht auch nicht darum, Anmerkungen zu einer Revision in der Vergangenheit zu machen: Wir sind nicht daran interessiert, wer ursprünglich die entfernte Zeile hinzugefügt hat (das ist nicht derjenige, der den Unterschied "verursacht" hat), wir möchten wissen, wer sie entfernt hat. Ich vermute, die einzige Möglichkeit, etwas zu implementieren, besteht darin, jedes Commit zwischen den beiden verglichenen Revisionen zu überprüfen (und irgendwie alle Änderungen in den einzelnen Unterschieden den Zeilen im Gesamtdifferenz zuzuordnen) ...
Gibt es ein Tool, das so etwas macht?
SVN diff benötigt genau zwei Revisionen und generiert eine Ausgabe im laufenden Betrieb. SVN Annotate benötigt genau eine Revision. Ihr Verdacht, dass das vorgeschlagene Dienstprogramm N Revisionen durchlaufen muss, ist richtig. SVN speichert Revisionszustände als ganze Objekte.
Vielleicht haben Sie mit git und dem git-svn-Gateway mehr Glück ...
quelle
In Ihrem grundlegenden Vanilla-SVN-Setup gibt es keinen Befehl, mit dem die Ausgaben von Schuld und Unterschied bei einer bestimmten Revision zusammengeführt werden können. Wenn Sie den von Ihnen verwendeten SVN-Client angegeben haben, konnte ich möglicherweise ein Plugin finden, das dies tut, aber Sie haben es nicht getan, sodass ich nicht nach einem suchen konnte.
Die einzige Alternative besteht darin, ein Skript oder ein kleines Programm zu verwenden, um die beiden Ausgaben abzugleichen. Dies sollte nicht so schwer sein, wenn Sie Zeilennummern auf Diff und Schuld bekommen können. Auch wenn dies nicht die Antwort ist, auf die Sie gehofft haben, ist es eine Antwort, und diese Frage ist seit 2009 offen.
quelle
Dies ist nicht ganz das, wonach Sie gesucht haben , aber Sie können eine kommentierte Ansicht der Änderungen in OpenGrok erhalten .
quelle
Nun, ich denke, das tut es jetzt.
Verwendungszweck;
blameDiff <path> [rev1] [rev2]
Bash-Funktion
Ich habe Kommentare als Erklärung hinzugefügt, damit ich hier nicht darauf eingehen werde.
Getestet, um mit den Ausgängen von
diff
(fedora 27),svn info
(1.10.2) auf meinem System YMMV zu arbeiten (aber trotz all meiner Bemühungen hoffe ich nicht so viel!).Grundsätzlich wird die
svn diff
Verwendung von "Justsvn cat
and Regular" neu implementiertdiff
, um die Revisions- und Zeilennummern zu berücksichtigen, und es wird genau verfolgt, wo in der Historie eine bestimmte Zeile entfernt wurde.Berücksichtigt sogar, ob sich die Dateien in verschiedenen Zweigen befinden, und zeigt sie wie svn an.
Hier sind Screenshots der beiden folgenden Befehle, wobei der Code aus Arbeitsgründen redigiert wurde.
Wie Sie sehen können, werden rechts im neuen Format einige zusätzliche Informationen angezeigt. Die ersten Spalten zeigen, dass Ashley in r6631 ein paar Zeilen hinzugefügt und in r6639 eine ganze Reihe von Zeilen gelöscht hat, die ursprünglich von zes vor langer Zeit @ r6466 & 6483 festgeschrieben wurden.
quelle