Czy istnieje sposób na przeszukiwanie pełnego tekstu repozytorium subversion, w tym całą historię?
Na przykład napisałem funkcję, której gdzieś użyłem, ale potem nie była potrzebna, więc svn rm'd pliki, ale teraz muszę ją znaleźć ponownie, aby użyć jej do czegoś innego. Log svn prawdopodobnie mówi coś w stylu „usunięto nieużywane rzeczy” i jest mnóstwo takich checkinsów.
Edycja 2016-04-15: Zwróć uwagę, że termin „wyszukiwanie pełnotekstowe” dotyczy wyszukiwania rzeczywistych różnic w historii zmian, a nie nazw plików i / lub komunikatów o zmianach . Zwracam na to uwagę, ponieważ powyższe sformułowanie autora nie odzwierciedla tego zbyt dobrze - ponieważ w swoim przykładzie równie dobrze mógłby on szukać tylko nazwy pliku i / lub komunikatu o zatwierdzeniu. Stąd wiele svn log
odpowiedzi i komentarzy.
źródło
--search
argument dlasvn log
polecenia. Zobacz moją odpowiedź na stackoverflow.com/a/17473516/761095svn log --search
nie wykonuje wyszukiwania pełnotekstowego zgodnie z wymaganiami @rjmunro, a jedynie przeszukuje autora, datę, komunikat dziennika i listę zmienionych ścieżek.Odpowiedzi:
źródło
apt-get install git-svn
.svn log
w Apache Subversion 1.8 obsługuje nową--search
opcję . Możesz więc przeszukiwać komunikaty dziennika historii repozytorium Subversion bez korzystania z narzędzi i skryptów innych firm.svn log --search
wyszukuje autora, datę, treść komunikatu dziennika i listę zmienionych ścieżek.Zobacz SVNBook |
svn log
odwołanie do wiersza polecenia .źródło
Jeśli używasz systemu Windows, spójrz na SvnQuery . Utrzymuje pełnotekstowy indeks lokalnych lub zdalnych repozytoriów. Każdy dokument kiedykolwiek przekazany do repozytorium jest indeksowany. Możesz wykonywać zapytania podobne do Google z prostego interfejsu internetowego.
źródło
Używam małego skryptu powłoki, ale działa to tylko dla jednego pliku. Możesz oczywiście połączyć to z funkcją find, aby dołączyć więcej plików.
Jeśli naprawdę chcesz przeszukać wszystko, użyj
svnadmin dump
polecenia i przejdź przez grep.źródło
Najlepszym sposobem, w jaki udało mi się to zrobić, jest mniej:
Gdy pojawi się mniej wyników, możesz użyć
/
wyszukiwania, jak VIM.Edytować:
Według autora, chce przeszukiwać nie tylko wiadomości i nazwy plików. W takim przypadku będziesz musiał zhakować go w getcie razem z czymś takim:
Możesz również zastąpić
grep
lub coś innego, aby przeprowadzić wyszukiwanie za Ciebie. Jeśli chcesz użyć tego w podkatalogu repozytorium, będziesz musiał użyćsvn log
do rozpoznania pierwszej wersji, w której ten katalog istniał, i użyć tej wersji zamiast0
.źródło
Szukałem czegoś podobnego. Najlepsze, co wymyśliłem, to OpenGrok . Nie próbowałem jeszcze go wdrożyć, ale brzmi obiecująco.
źródło
dla diff możesz użyć
--diff
opcjinastępnie użyj vim lub nano lub czegokolwiek, czego lubisz, i wyszukaj to, czego szukasz. Znajdziesz to dość szybko.
To nie jest wyszukany skrypt ani nic zautomatyzowanego. Ale to działa.
źródło
Chociaż nie jest za darmo, możesz rzucić okiem na Fisheye od Atlassian, tych samych ludzi, którzy oferują JIRA. Wykonuje wyszukiwanie pełnotekstowe w SVN z wieloma innymi przydatnymi funkcjami.
http://www.atlassian.com/software/fisheye/
źródło
Szukałem tego samego i znalazłem to:
http://svn-search.sourceforge.net/
źródło
Właśnie napotkałem ten problem i
wykonał pracę za mnie. Zwróciłem korektę pierwszego wystąpienia i zacytowałem wiersz, którego szukałem.
źródło
Nie mam z tym żadnego doświadczenia, ale SupoSE (open source, napisane w Javie) jest narzędziem zaprojektowanym właśnie do tego.
źródło
svn log -l<commit limit> | grep -C<5 or more lines> <search message>
źródło
Zwykle robię to, co mówi Jack M (użyj svn log --verbose), ale potokuję do grep zamiast mniej.
źródło
less
możesz zobaczyć wersję, datę itp. Zamiast tylko linii w komentarzu. I tak zwykle tego szukam.Napisałem to jako skrypt bash cygwin, aby rozwiązać ten problem.
Jednak wymaga, aby wyszukiwany termin znajdował się obecnie w pliku systemu plików. Dla wszystkich plików, które pasują do systemu plików grep, wykonywane jest następnie grep wszystkich różnic svn dla tego pliku. Nie jest doskonały, ale powinien być wystarczająco dobry do większości zastosowań. Mam nadzieję że to pomoże.
/ usr / local / bin / svngrep
/ usr / local / bin / svnrevisions
źródło
W przypadku, gdy próbujesz określić, która wersja jest odpowiedzialna za określoną linię kodu, prawdopodobnie szukasz:
Kredyt: oryginalna odpowiedź
źródło
Natknąłem się na ten skrypt basha , ale nie próbowałem go.
źródło