Jak znaleźć, kto usunął linię z pliku w repozytorium SVN?

12

Pracuję nad bardzo dużym projektem (ponad 10000 wersji) i czasami zdarza się, że muszę wiedzieć, kto z pozostałych użytkowników usunął jakąś linię w pliku. Czy jest na to sposób? Mogę zrobić svn blamez numerem wersji, aby sprawdzić, czy linia istnieje w tej wersji, a następnie zobaczyć, w której wersji linia zniknęła i zobaczyć, kto zatwierdził tę wersję, ale ta procedura jest kiepska w tym dużym projekcie.

Czy jest na to lepszy sposób?

Ivan Petrushev
źródło

Odpowiedzi:

5

Robi to, czego potrzebujesz automatycznie, choć niezbyt szybko, ponieważ nie używa wyszukiwania binarnego, jak sugerowano powyżej:

svn log FILE | egrep '^r[0-9]' | sed -e 's/ .*//' | while read rev; do echo $rev ; svn cat FILE -"$rev" | grep "case STRING" && break  ; done 
Peter Brülls
źródło
5

Sprawdziłbym historię pliku i spróbowałem szybko znaleźć wersję, w której znajduje się ta linia, a następnie obwinić HEAD i tę wersję.

Jeśli plik przeszedł 100 wersji od początku, to jeśli binarnie przeszukujesz wersje szukające tej linii, nie powinieneś patrzeć na więcej niż 10 różnych wersji.

ta.speot.is
źródło
Nie widzę opinii, wszystko wydaje mi się dobrą radą: P
Phoshi
1
To jest to samo, co moje podejście. Chcę czegoś prostszego / szybszego niż przeglądanie w 10 wersjach.
Ivan Petrushev
... to 10 wersji. Zanim opublikujesz powyższe pytanie, możesz już zrobić. Chyba że będzie to coś, co musisz zrobić od nowa, w takim przypadku zignoruj ​​moje komentarze.
ta.speot.is
2
Tak, jest doskonały do ​​pojedynczego strzału, ale potrzebuję czegoś, z czego często można korzystać regularnie.
Ivan Petrushev
3

svn log --diffokreśli usunięcia za pomocą „-” w kolumnie zero. Grep dla „r” również, abyś mógł zobaczyć wersję.

% svn log --diff src/fozbo.cpp -r22222:HEAD | grep -e '^r' -e '^-.*xyzzy'
r22222 | jruser | 2016-07-19 20:16:07 -0400 (Tue, 19 Jul 2016) | 1 line
-   else if ( password== "xyzzy") {

Jest też, svn log --searchale przeszukuje tylko komunikat zatwierdzenia.

Robert Calhoun
źródło