2012-06-18 8 views
5

Chciałbym dowiedzieć się wszystkich autorów, którzy zmienili linię kodu. Git-log może to zrobić na poziomie pliku. Przeczytałem stronę man i wygląda na to, że log git nie może tego zrobić na poziomie linii. Czy istnieje sposób na użycie polecenia git, aby to zrobić, lub muszę napisać skrypt dla siebie?można znaleźć wszystkich autorów, którzy kiedykolwiek zmienili linię kodu?

Dla mojego celu chciałbym to zrobić dla wszystkich linii kodu. Robię to, aby uzyskać dane treningowe autorstwa dla moich badań.

+2

Możesz obwiniać/opisywać, aby uzyskać informacje na temat poziomu każdej wersji. "Kto zmienił linię" zaczyna być niewyraźnym pytaniem, gdy wprowadzisz wiele wersji. –

+0

Jaki jest tego cel? –

+0

@Tomasz: Przydatna jest historia wyszukiwania dla konkretnej linii, szczególnie gdy chcesz sprawdzić, jak długo istniał błąd w kodzie źródłowym lub kto dotknął konkretnej funkcji. – Christopher

Odpowiedz

3

Chcesz połączyć flagi -S i --pretty na git log.

Od strony git log człowieka, poszukiwanie -S kilof:

-S<string> 
     Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output; 
     see the pickaxe entry in gitdiffcore(7) for more details. 

Ta flaga wygląda dla wszystkich zmian danego łańcucha. Using an example from another SO answer,git log -g -Ssearch_for_this przeszuka historię wszystkich zmian w "search_for_this".

Połącz z --pretty, aby uzyskać lepsze wyniki. Na przykład, polecenie to będzie przeglądać historię zmian do „foo” i powrót skróconą hash, a następnie przez autora, dwa myślniki, pierwsza linia wiadomości, dwóch kresek, a data:

$ git log -Sfoo --pretty=format:'%h %an -- %s -- %ad' 
bc34134 Sally Developer -- Fixed all bugs and made all clients happy forever -- Tue Jan 31 17:41:17 2025 -0500 
+0

Masz na myśli umieszczając zawartość linii po opcji -S? To może mi pomóc w znalezieniu zatwierdzenia zmieniającego ciąg znaków, ale nadal muszę znaleźć poprzednią formę linii i używać tej metody, dopóki nie będzie jej poprzedniej wersji? – user1440858

+0

Hmmm. Tak. To rozwiązanie doprowadzi cię tylko do punktu, w którym wprowadzono . Jeśli chcesz śledzić przeszłość tej zmiany, nie zadziała. Może to? https://github.com/renard/git-line-history Znalezione przez google. Nie wiem, czy to działa, ale wykorzystuje "git winę". – Christopher

Powiązane problemy