2009-04-01 18 views
76

Wir haben ein Massen-Repository für Code enthalten Tausende von Ordner und Unterordner, ich möchte unter diesem Repository mit dem Dateinamen oder mit einem Wort suchen.Suche im SVN-Repository nach einem Dateinamen

Root folder 
    a\ 
    b\ 
    c\ 
    d\ 
    e\ 
    f\ab\ 
    f\ab\cd.txt 

Ich möchte für cd.txt suchen, aber nicht wissen, wo sie im SVN-Repository ist, für die ich eine Suche auf dem Stammordner von SVN ausgeführt werden soll, wo ich den Dateinamen cd.txt gestellt wird und Führen Sie den Befehl, wird in jedem Ordner einchecken und wird die Datei Details Ergebnis anzeigen ....

Hoffnung Anforderung ist klar. Kannst du mir bitte dabei helfen?

+0

möglich Duplikat von [Suche Subversion Geschichte (Volltext)] (http://StackOverflow.com/Questions/44176/Searching-Subversion-History-Full-Text) – bahrep

+2

Ich glaube nicht, dass es ein Duplikat ist. Es geht darum, die Geschichte zu durchsuchen. Hier geht es um die Suche nach einer Datei. –

+0

Ich hatte gehofft, es gab einen clientseitigen Befehl, den Sie eingeben könnten, der die Suche Server-Seite ausführen würde. Dieser SVN-Repo, mit dem ich arbeite, hat schreckliche Antwortzeiten und Übertragungsrate über VPN. Leider scheint das nicht möglich zu sein. –

Antwort

12

svn list --depth infinity <your-repo-here>, um eine Liste von Dateien im Repo zu erhalten, und dann svn cat, um Inhalte zu erhalten. Sie können den Befehl --xml dem Befehl list hinzufügen, um das Parsen etwas einfacher zu machen.

+0

Denken Sie daran, 'grep' zu verwenden, wenn Sie eine Datei sehen wollen, besonders wenn Sie Tausende von Dateien im Repository haben, wie das OP. Außerdem gibt es einen '--incremental' Modus, wenn Sie die Ausgabe mit einer späteren/früheren XML Ausgabe verbinden müssen. – trysis

54

Wenn die Datei in Ihrer Arbeitskopie ist, dann, wenn Sie svn 1.5 mit:

svn list --depth infinity | grep <filename> 

oder eine frühere Version von svn:

find . -name <filename> -not -path '*.svn*' 

Wenn Sie finden, um die Datei in Geschichte (gelöscht oder verschoben):

svn log -v | less 

und suchen sie sie mit:

\<filename><return> 
+3

svn list --depth unendlich funktioniert gut, in Windows natürlich haben Sie nicht grep standardmäßig, ich habe es einfach in eine Textdatei und durchsuchen Sie das mit einem Texteditor: – Mandrake

+4

In Windows PowerShell können Sie '... | verwenden select-string 'als Ersatz für' grep'. –

+2

In einer normalen Windows-Befehlszeile '... | find "" 'funktioniert auch als Ersatz für grep. ** HINWEIS **: Die "benötigt um den Dateinamen. – Raystorm

52

Die folgenden Werke für mich (SVN-Version 1.4.6)

svn list -R <URL> | grep "<file_pattern>" 
+5

Großartig. Das funktioniert für Tortoise. In Windows: Svn-Liste -R Myurl >> results.txt –

+0

Funktioniert wirklich gut. Auch viel leichter zu erinnern nur "- R "als" --tiefe Unendlichkeit ". – MPV

4

Wenn Sie TortoiseSVN verwenden Sie können dies versuchen, wenn Sie bereit sind, Projekt suchen Projekt durch - funktioniert für mich:

  1. erstellen sie ein leeres Projekt unter Repository Top-Level-URL, es
  2. Klicken sie auf das Repo-URL
  3. auf der rechten Pfanne auf linken Bereich bLANK rufen Wählen Sie Ihr BLANK-Projekt und Ihr gewünschtes Projekt aus - sagen Sie run
  4. Klicken Sie mit der rechten Maustaste, um das Browsermenü aufzurufen und wählen Sie 'URLs vergleichen'. Je nach Größe Ihres Repos kann das Laden eine Minute dauern. Aber Sie erhalten Ihre gesamte Projektliste in einer "ready-to-search" -Liste.
  5. Geben Sie Ihren Dateinamen oder andere Zeichenfolge im Suchfilter
5

Vor kurzem habe ich meine veröffentlicht utility das Repository zur Liste, das ist viel schneller als „Svn ls --depth Unendlichkeit“ -Ansatz. Hier sind die benchmarks. Es ruft nur eine Funktion auf, die in der internen API von Subversion verfügbar ist, aber jetzt über eine Befehlszeile zugänglich ist.

So können Sie

$ svn-crawler <URL> | grep "<file_pattern>" 
15

Mit dem Zugriff auf den Repo selbst (dh auf dem SVN-Host-Datei Sytem)

svnlook tree [path_to_repo] | grep [file_name] 

oder suchen Sie alle repos verwenden laufen (wenn Sie mulitple repos Setup).

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

die Option --Volle-Pfade den vollständigen Pfad in Repo in die Datei (falls gefunden)

Beispiel:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done 

Umleitung in eine Datei ausgegeben, wenn statische Kopie ist erforderlich.
wird unter Verwendung von Nix OS angenommen.

+3

+1 für die Verwendung von" Svnlook Baum - voll-Pfade | grep ". Dies ist der schnellste Weg, den ich gefunden habe, um eine Dateisuche in einem Subversion Repo zu machen. –

+0

blitzschnelle Suche, sehr nützlich. –

0

Wenn Ihr Remote-Repository nicht riesig ist, dann ist eine einfache Methode: Sie können eine "Kasse" ausführen, um ein lokales Repository zu erhalten. Wenn Sie in Windows-Maschine sind, verwenden Sie "Suchen" oder Linux-Maschine verwenden Sie den Befehl "Suchen".