Wydajne wyszukiwanie lokalne w dużej svn

0

Niedawno zaangażowałem się w nowy projekt z dużym SVN (70 GB, 9000 zatwierdzeń, pełen plików tekstowych i binarnych). W swojej pracy muszę analizować różne dokumenty i zmiany, które zostały w nich wprowadzone w ciągu ostatnich 4 lat. Chociaż analiza historii pojedynczych plików jest dość prosta, natknąłem się na przypadek użycia, dla którego nie mogłem znaleźć odpowiedniego narzędzia:

Dowiedz się, które dokumenty w repozytorium zawierały (w której wersji) określone wyszukiwane hasło. Moim naiwnym podejściem byłoby sprawdzenie wszystkich wersji lokalnie w folderze dla każdej wersji (i zastąpienie niezmienionych plików dowiązaniami symbolicznymi do innych folderów, aby zaoszczędzić miejsce), a następnie wyszukiwanie za pomocą grep w plikach.

Głównym ograniczeniem dla mnie jest to, że mam dostęp do serwera tylko przez klienta svn (więc nie mogę po prostu sklonować całego repozytorium).

Czy jest jakieś narzędzie, które pozwoliłoby mi pobrać całe repozytorium (w tym wszystkie wersje) lokalnie, a następnie zapewnić szybkie wyszukiwanie bez zagłuszania mojego HD w duplikatach?

Chris
źródło
Wow, to trudny problem. Moją początkową myślą jest to, że możesz spróbować przeanalizować pełne dane wyjściowe svn log -vw katalogu głównym aktualnej kasy, aby dowiedzieć się, które pliki uległy zmianie w której wersji; z tego zbuduj skrót wpisujący ścieżkę i wyceniony przez szereg poprawek, w których zmienił się plik w tej ścieżce; następnie svn exportkażdy plik w każdej zidentyfikowanej wersji, grep go i utwórz listę, która para plik / wersja zawiera wyszukiwany termin. Następnie możesz przejść i sprawdzić pliki, które nigdy się nie zmieniły w żadnej wersji, a to powinno dać ci pełny wynik.
Aaron Miller,
... oczywiście, uruchomienie takiego programu zajęłoby dużo czasu i prawdopodobnie znaczna ilość przepustowości i tymczasowe miejsce na dysku. (Oczywiście, że nie chcesz przechowywać kopii poszczególnych wersji danego pliku, gdy tylko je obejrzysz. Ale w repozytorium o pojemności 70 GB założę, że niektóre pliki są dość duże.) Ale poza tym , wydaje się to wykonalne i potencjalnie interesujące wyzwanie.
Aaron Miller,
Czy możesz rozważyć użycie Mercurial lokalnie z hgsubversion do klonowania? hg grepjest narzędziem o dużej mocy, klon repozytorium będzie wymagał dużo miejsca, tak, ale myślę - nadal mniejszy niż wszystkie wersje repozytorium SVN w postaci zwykłego tekstu
Lazy Badger
„Mam dostęp do serwera tylko za pośrednictwem klienta svn” - nie stanowi to żadnego problemu: svnrdump może zrzucić zdalne repo do lokalnego pliku zrzutu, który można ponownie zapisać w lokalnym repozytorium ... Ale funkcje wyszukiwania SVN będą tak czy inaczej słaba i ograniczona, sposób Mercurial wydaje się bardziej obiecujący (dla mnie)
Lazy Badger