2010-09-13 10 views
7

Ich muss alle Revisionen eines Subversion-Repositorys durchsuchen, um Dateinamen und Revisionsnummern zu finden, die eine bestimmte Zeichenfolge enthalten. Ich weiß, dass dies Vorkommen in einem Speicherabbild finden wird:Wie finde/suche/suche ich einen SVN-Repository-Verlauf?

svnadmin dump $REPO_PATH | grep -i "Verdana" 

aber der Ausgang ist zu kryptisch. Die Ausgabe enthält Teile von Binärdateien, die übereinstimmen.

Ich habe Befehle wie dies mit für Strings in der aktuellen Arbeitskopie eines Projekts suchen:

find . -name "*.css" -print0 | xargs -0 grep "Verdana" 

Das Format der Ausgabe nützlich ist, ist es sowohl Dateinamen geben und die Zeile, in der die Zeichenfolge aufgetreten: gibt es

./css/forms.css: font  : 12px Verdana; 

eine Möglichkeit, alle Änderungen eines SVN-Repository zu suchen sagen wir, alle .css Dateien, die einen Suchbegriff enthalten? Und nicht nur ein Wort, sondern eine Zeichenfolge mit Platzhaltern oder einem regulären Ausdruck wie Grep?

Hinweis: Ich habe Root-Zugriff auf den Linux-Server mit dem Repository darauf.

Hinweis: Ich möchte keine Arbeitskopie suchen, ich muss alle Revisionen suchen.

+0

Mögliche Duplikate von [.svn Verzeichnisse aus Grep ausschließen] (http://StackOverflow.com/Questions/1491514/Exclude-SVN-Directories-from-Grep) –

+0

Dies ist definitiv kein Duplikat von .svn auszuschließen Verzeichnisse von grep ... – quickshiftin

Antwort

0

Haben Sie

versucht
svn log --verbose 

auf Ihrem Root-Verzeichnis, jede Protokollmeldung Druck und alle betroffenen Pfade. Es lässt Sie den Dateiinhalt nicht analysieren, aber Sie können zumindest nach .css Dateien suchen.

+0

Ja, es scheint viele Lösungen für die Suche nach Dateinamen zu geben. Der Inhalt ist kniffliger. – Liam

+0

Sie könnten 'diff' verwenden, um zwischen dieser letzten Version und jeder vorherigen Version eine Klartextausgabe zu generieren. Vielleicht können Sie sogar das 'diff' auf bestimmte Dateien beschränken, basierend auf den Ergebnissen von 'svn log'. – zellus

+0

http://stackoverflow.com/questions/1118051/how-do-i-search-all-revisions-of-a-file-in-a-subversion-repository ist ein fast Duplikat dieser Frage, durchsucht jedoch alle Revisionen für nur eine Datei. http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=627008 scheint ein interessanter Ansatz, aber nicht out of the box. – zellus

5

Die einfachste (und effektivste, die ich gefunden habe) Weg, dies zu tun, und es dauert ein wenig Zeit im Voraus investieren - klonen Sie das Svn-Repository in Git, dann gitk zum Durchsuchen des Repository.

Da sich das gesamte Repository auf Ihrem lokalen System befindet, ist die Suche unendlich schneller schneller!

Ich habe ein großes Subversion-Repository für ungefähr 30 Entwickler verwaltet, sie kamen oft zu meinem Schreibtisch und fragten: "Kannst du diese Änderung finden ..", etc. Ich würde einfach gitk starten!

svn log ist schrecklich langsam, da es den Server treffen muss. Auch wenn Sie Zugriff auf den Server haben, müssen Sie wahrscheinlich einige | grep -v oder ähnlich wie alle .svn Verzeichnisse entwirren.

0

Denken entlang der Linien:

svn log $location -q | grep -P 'r\d+' -o | grep -P '\d+' -o | xargs -l1 svn diff -c | grep $pattern 

Ich denke, durch die Flaggen Einstellung Sie geben eine kompliziertere Pipeline (möglicherweise durch eine Rohrleitung zu einer Schleife anstelle von xargs) grep oder schreiben Sie können SVN grep Geschichte für alles.