Wyszukiwanie w repozytorium SVN [zamknięte]


155

Czy jest jakieś dobre oprogramowanie, które umożliwi mi przeszukiwanie mojego repozytorium SVN w poszukiwaniu fragmentów kodu? Znalazłem „FishEye”, ale koszt to 1200 i znacznie przekracza mój budżet.


6
Czy musisz przeszukiwać historię repozytorium? A może tylko głowa?
swilliams

4
Dostępna jest darmowa wersja FishEye - www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas Brak darmowych opcji teraz
bahrep

Istnieje wersja FishEye za 10 USD: www.atlassian.com/software/starter/overview , @bahrep. Raz wszystko idzie na cele charytatywne.
David d C e Freitas,

1
Pojawiła się nowa svn log --searchopcja, może być przydatna dla kogoś, kto szuka prostego przeszukiwania historii repozytorium.
bahrep

Odpowiedzi:


69

Jeśli szukasz tylko nazwy pliku, użyj:

svn list -R file:///subversion/repository | grep filename

Okna:

svn list -R file:///subversion/repository | findstr filename

W przeciwnym razie wyewidencjonuj i przeprowadź wyszukiwanie w systemie plików:

egrep -r _code_ .

3
Może nie jest to do końca oczywiste, ale te polecenia mają zastosowanie do dowolnej metody dostępu do serwera svn, nie tylko do pliku: (np. Svn: i svn + ssh: również działają)
Alex Marshall

2
//, Czy mógłbyś podać działający przykład dla każdego z nich?
Nathan Basanese

1
OP chciał przeszukiwać pliki, a nie tylko nazwy plików. przykład wyszukiwania w systemie plików niezbyt przydatny.
erict


12

Aktualizacja styczeń 2020

VisualSVN Server 4.2 obsługuje wyszukiwanie plików i folderów w interfejsie internetowym. Wypróbuj nową funkcję w jednym z repozytoriów serwera demonstracyjnego !

Zobacz wersję 4.2 Release Notes i pobierz VisualSVN Server 4.2.0 z głównej strony pobierania .

wprowadź opis obrazu tutaj


Stara odpowiedź

Począwszy od Subversion 1.8, możesz użyć --searchopcji z svn logpoleceniem . Zwróć uwagę, że polecenie nie przeprowadza wyszukiwania pełnotekstowego w repozytorium, bierze pod uwagę tylko następujące dane:

  • autor rewizji ( svn:authorwłasność niewersjonowana),
  • data ( svn:datenieruchomość niewersjonowana),
  • tekst komunikatu dziennika ( svn:logniewersjonowana właściwość),
  • lista zmienionych ścieżek (tj. ścieżek, na które wpływa dana wersja).

Oto strona pomocy dotycząca tych nowych opcji wyszukiwania:

 If the --search option is used, log messages are displayed only if the
 provided search pattern matches any of the author, date, log message
 text (unless --quiet is used), or, if the --verbose option is also
 provided, a changed path.
 The search pattern may include "glob syntax" wildcards:
     ?      matches any single character
     *      matches a sequence of arbitrary characters
     [abc]  matches any of the characters listed inside the brackets
 If multiple --search options are provided, a log message is shown if
 it matches any of the provided search patterns. If the --search-and
 option is used, that option's argument is combined with the pattern
 from the previous --search or --search-and option, and a log message
 is shown only if it matches the combined search pattern.
 If --limit is used in combination with --search, --limit restricts the
 number of log messages searched, rather than restricting the output
 to a particular number of matching log messages.

1
Ta metoda działa szybko, ale nie należy jej używać do wyszukiwania obecności plików. Ponieważ ta opcja wyszukiwania analizuje tylko listę jawnie zmienionych ścieżek w każdej wersji, możesz utworzyć kopie folderów (nowa gałąź utworzona z linii głównej), w których obecny jest określony plik, ale nie zostanie wyświetlony za pomocą tej metody.
Pieter-Jan Busschaert

@ Pieter-JanBusschaert Twój komentarz dotyczy użycia polecenia svn log --search. Zobacz zaktualizowaną odpowiedź na temat nowego wyszukiwania opartego na sieci webui. Nie ma tego ograniczenia.
bahrep


9
  1. Utwórz git-svnkopię lustrzaną tego repozytorium.
  2. Wyszukaj dodane lub usunięte ciągi w git: git log -S'my line of code'lub to samo wgitk

Zaletą jest to, że możesz wykonać wiele wyszukiwań lokalnie, bez obciążania serwera i połączenia sieciowego.


8

Ten przykład przekierowuje całą zawartość repozytorium do pliku, w którym można szybko wyszukać nazwy plików w edytorze:

svn list -R svn://svn > filelist.txt

Jest to przydatne, jeśli repozytorium jest względnie statyczne i chcesz przeprowadzić szybkie wyszukiwanie bez konieczności wielokrotnego ładowania wszystkiego z serwera SVN.


4
Należy zauważyć, że w moim przypadku konieczne było użycie httpjako protokołu ( svn list -R http://repo/svn/etc).
Charles Wood

odrzucono, ponieważ OP chciał przeszukiwać pliki, a nie nazwy plików. Polecenie svn list zrzuca tylko nazwy plików repozytorium.
erict


4

Uwaga, FishEye (i wiele innych produktów Atlassian) ma edycje Starter o wartości 10 USD, co w przypadku FishEye zapewnia 5 repozytoriów i dostęp do maksymalnie 10 committerów. W tym przypadku pieniądze trafiają na cele charytatywne.

www.atlassian.com/starter


Nigdy więcej? Nie widzę bezpłatnych opcji na stronie.
bahrep,

@bahrep, zaktualizowałem odpowiedź, teraz jest to 10 dolarów, które trafiają na cele charytatywne, które są faktycznie „bezpłatne”, jeśli się nad tym zastanowić.
David d C e Freitas

3

Boleśnie powolny (i prymitywnie zaimplementowany), ale połączenie svn log i svn cat działa, jeśli przeszukujesz historię pojedynczych plików lub małych repozytoriów:

svn log filetosearch |
    grep '^r' |
    cut -f1 -d' ' |
    xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'" 

wyświetli każdy numer wersji, w której plik został zmieniony, i plik. Zawsze można było przenieść każdą wersję do innego pliku, a następnie przeszukać zmiany.

PS. Ogromne głosy poparcia dla każdego, kto pokaże mi, jak to zrobić poprawnie!


3
Po prostu użyj git-svn. Git ma wbudowane wyszukiwanie kodu w historii zmian. Ale będziesz musiał pobrać całą historię zatwierdzeń do użycia git-svn.
Vi.

2

Jeśli jesteś naprawdę zdesperowany, zrób zrzut repozytorium (spójrz na "svnadmin dump"), a następnie przejdź przez to. To nie jest ładne, ale możesz rozejrzeć się po wynikach wyszukiwania, aby znaleźć metadane wskazujące plik i wersję, a następnie sprawdzić, aby uzyskać lepszy wygląd.

Z pewnością nie jest to dobre rozwiązanie, ale jest darmowe :) SVN nie zapewnia funkcji wyszukiwania poprzednich meldowań (ani nawet przeszłych plików dziennika, AFAIK).


1

Wiele repozytoriów SVN to „po prostu” witryny HTTP, więc możesz rozważyć skorzystanie z gotowej aplikacji do przeszukiwania sieci, którą możesz wskazać na katalog główny SVN i która zapewni Ci podstawową funkcjonalność. Aktualizacja prawdopodobnie będzie trochę sztuczka, być może niektóre sprawdzanie SVN w hakowaniu może łaskotać indeks, aby odrzucić lub ponownie zindeksować zmiany w trakcie.

Po prostu głośno myślę.


1
To prawdopodobnie nie jest dobry pomysł, ponieważ koszty ogólne byłyby ogromne. Ponadto serwery SVN nie są zwykle zwykłymi stronami internetowymi, ale repozytorium svn ujawniane przez webdav.
torkildr



0

// Edycja: Narzędzie zostało już wspomniane w innej odpowiedzi, więc oddaj wszystkie kredyty Kuryaki.

Właśnie znalazłem SupoSE, które jest narzędziem wiersza poleceń opartym na Javie, które skanuje repozytorium w celu utworzenia indeksu, a następnie jest w stanie odpowiadać na określone rodzaje zapytań. Wciąż oceniamy to narzędzie, ale wygląda obiecująco. Warto wspomnieć, że tworzy pełny indeks wszystkich wersji, w tym pliki z kodem źródłowym i popularne formaty biurowe.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.