Wie finde ich heraus, wer eine Zeile aus einer Datei in einem SVN-Repository gelöscht hat?

11

Ich arbeite an einem sehr großen Projekt (über 10000 Versionen) und manchmal musste ich wissen, wer von den anderen Benutzern eine Zeile in einer Datei gelöscht hat. Gibt es eine Möglichkeit, das zu tun? Ich kann svn blamemit der Revisionsnummer prüfen, ob in dieser Revision eine Zeile vorhanden ist, und dann sehen, in welcher Revision die Zeile nicht mehr vorhanden ist und wer diese Revision festgeschrieben hat, aber dieses Verfahren ist bei diesem großen Projekt lahm.

Gibt es eine intelligentere Möglichkeit, dies zu tun?

Ivan Petrushev
quelle

Antworten:

5

Dies erledigt automatisch das, was Sie benötigen, wenn auch nicht sehr schnell, da die oben vorgeschlagene binäre Suche nicht verwendet wird:

svn log FILE | egrep '^r[0-9]' | sed -e 's/ .*//' | while read rev; do echo $rev ; svn cat FILE -"$rev" | grep "case STRING" && break  ; done 
Peter Brülls
quelle
5

Ich würde den Verlauf der Datei überprüfen und versuchen, schnell eine Revision zu finden, in der diese Zeile vorhanden ist, und dann zwischen HEAD und dieser Revision die Schuld geben.

Wenn die Datei seit ihrer Einführung 100 Revisionen durchlaufen hat, sollten Sie beim binären Durchsuchen von Revisionen nach dieser Zeile nicht mehr als 10 verschiedene Revisionen betrachten müssen.

ta.speot.is
quelle
Ich sehe die Meinung nicht, es sieht alles nach einem guten Rat für mich aus: P
Phoshi
1
Dies ist das gleiche wie mein Ansatz. Ich möchte etwas einfacheres / schnelleres als in 10 Revisionen.
Ivan Petrushev
... es sind 10 Revisionen. Bis Sie die obige Frage gestellt haben, können Sie jetzt fertig sein. Es sei denn, dies ist etwas, was Sie noch einmal tun müssen. In diesem Fall ignorieren Sie meine Kommentare.
ta.speot.is
2
Ja, es ist hervorragend für einen einzelnen Schuss, aber ich brauche etwas, das oft regelmäßig verwendet werden kann.
Ivan Petrushev
2

svn log --difflöscht Löschungen mit "-" in Spalte Null. Grep auch für "r", damit du die Revision sehen kannst.

% svn log --diff src/fozbo.cpp -r22222:HEAD | grep -e '^r' -e '^-.*xyzzy'
r22222 | jruser | 2016-07-19 20:16:07 -0400 (Tue, 19 Jul 2016) | 1 line
-   else if ( password== "xyzzy") {

Es gibt svn log --searchaber auch nur das Durchsuchen der Commit-Nachricht.

Robert Calhoun
quelle