Wyszukaj w repozytorium SVN nazwę pliku

84

Mamy zbiorcze repozytorium kodu zawierające tysiące folderów i podfolderów, chcę przeszukać ten repozytorium z nazwą pliku lub jakimś słowem.

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

Chcę wyszukać cd.txt, ale nie wiem, gdzie jest w repozytorium SVN, ponieważ chcę przeprowadzić wyszukiwanie w folderze głównym SVN, w którym umieszczę nazwę pliku cd.txt i uruchomię polecenie, sprawdzę każdy folder i wyświetli wynik szczegółów pliku ....

Nadzieja jest jasna. Czy możesz mi w tym pomóc?

Nakilon
źródło
Miałem nadzieję, że istnieje polecenie po stronie klienta, które można wprowadzić, które spowoduje wykonanie wyszukiwania po stronie serwera. To repozytorium SVN, z którym pracuję, ma straszne czasy odpowiedzi i szybkość transferu przez VPN. Niestety, wydaje się to niemożliwe.
Patrick M

Odpowiedzi:

60

Jeśli plik znajduje się w kopii roboczej, to jeśli używasz svn 1.5:

svn list --depth infinity | grep <filename>

lub wcześniejsza wersja svn:

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

Jeśli chcesz znaleźć plik w historii (usunięty lub przeniesiony):

svn log -v | less

i wyszukaj za pomocą:

\<filename><return>
lmop
źródło
3
Lista SVN --depth nieskończoność działa dobrze, w oknach oczywiście przyzwyczajenie masz grep domyślnie, po prostu rzucił go do pliku tekstowego i przeszukiwane przez które za pomocą edytora tekstu:
Mandrake
4
W programie Windows PowerShell można użyć ... | select-string <filename>jako zamiennika dla grep.
MarnixKlooster ReinstateMonica
2
W zwykłej linii poleceń Windows ... | find "<filename>"będzie również działać jako zamiennik grep. UWAGA : „są wymagane w okolicach nazwy pliku.
Raystorm
7
Jeśli plik jest w mojej kopii roboczej, nie potrzebuję svn, aby go znaleźć. Powinieneś dodać sposób wyszukiwania repozytorium, takiego jak odpowiedzi Antona i Mariosa. Być może jest to dla ciebie oczywiste, ale to ich odpowiedzi podnieciły światło dla zwykłego starego mnie.
Lieven Keersmaekers
1
Możesz svn co --depth empty REPOURL RepoDir, cd RepoDira svn list --depth infinitynastępnie pobrać wszystkie ścieżki plików z serwera SVN (prawdopodobnie tworząc miliony linii, jeśli masz miliony).
Ivan Akcheurov
58

Poniższe działa dla mnie (wersja svn 1.4.6)

svn list -R <URL> | grep "<file_pattern>"
Marios V
źródło
6
Świetny. Działa to w przypadku Tortoise. W systemie Windows: lista svn -R myurl >> results.txt
live-love
Działa naprawdę dobrze. Dużo łatwiej też zapamiętać samo „-R” niż „--depth infinity”.
MPV,
powolny dla dużych repozytoriów, lepiej użyj svn-crawler poniżej.
karsten
17

Z dostępem do samego repozytorium użyj (tj. W systemie plików hosta svn)

svnlook tree [path_to_repo] | grep [file_name]  

lub przeszukać wszystkie repozytoria (jeśli masz konfigurację wielu repozytoriów).

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 

opcja --full-path da pełną ścieżkę w repozytorium do pliku (jeśli zostanie znaleziona)

przykład:

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

przekieruj dane wyjściowe do pliku, jeśli wymagana jest kopia statyczna.
zakłada używanie nix OS.

Robert Iles
źródło
3
+1 za użycie "svnlook tree --full-path <path_to_repo> | grep <filename>". Jest to najszybszy sposób wyszukiwania plików w repozytorium Subversion.
Nick Grealy
błyskawiczne wyszukiwanie, bardzo przydatne.
Dustin Cook,
12

svn list --depth infinity <your-repo-here>aby uzyskać listę plików w repozytorium, a następnie svn catpobrać zawartość. Możesz dodać --xmlklucz do listpolecenia, aby nieco uprościć analizowanie.

Anton Gogolev
źródło
Pamiętaj, aby użyć, grepjeśli chcesz zobaczyć 1 plik, zwłaszcza jeśli masz tysiące plików w repozytorium, takich jak OP. Istnieje również --incrementaltryb, jeśli chcesz połączyć dane wyjściowe z późniejszymi / wcześniejszymi danymi wyjściowymi XML.
trysis
6

Niedawno opublikowałem moje narzędzie do tworzenia listy repozytoriów, jest to znacznie szybsze niż podejście "svn ls --depth infinity". Oto wzorce . Po prostu wywołuje funkcję, która jest dostępna w wewnętrznym API Subversion, ale teraz jest dostępna z linii poleceń.

Więc możesz biec

$ svn-crawler <URL> | grep "<file_pattern>"
Dmitry Pavlenko
źródło
Niezłe narzędzie. Testowałem z CentOS7. Musiałem dodać libsvn_delta i libsvn_subr do listy target_link_libraries w CMakeLists.txt, a także dostosować LIBAPR_LIBRARY_INCLUDE z „include / apr-1.0” do „include / apr-1”.
karsten
4

Jeśli używasz TortoiseSVN, możesz spróbować tego, JEŚLI chcesz spojrzeć na projekt według projektu - działa dla mnie:

  1. Utwórz pusty projekt pod adresem URL najwyższego poziomu repozytorium, nazwij go PUSTYM
  2. Kliknij adres URL repozytorium w lewym okienku
  3. W prawym panelu wybierz swój PUSTY projekt i żądany projekt - powiedzmy bagażnik
  4. Kliknij prawym przyciskiem myszy, aby wyświetlić menu przeglądarki i wybierz opcję „Porównaj adresy URL”, w zależności od rozmiaru repozytorium, wczytanie może potrwać minutę. Ale w zasadzie cała lista projektów znajduje się na liście „gotowej do wyszukiwania”.
  5. Wprowadź nazwę pliku lub inny ciąg w filtrze wyszukiwania
dci_dave
źródło
-2

Jeśli twoje zdalne repozytorium nie jest ogromne, to prostą metodą jest: Możesz zrobić "pobranie", aby uzyskać lokalne repozytorium. Jeśli pracujesz na komputerze z systemem Windows, użyj polecenia „Wyszukaj”, a na komputerze z systemem Linux, użyj polecenia „Znajdź”.

Antony Raja
źródło