2015-08-31 49 views
7

W jaki sposób w git określę wszystkie istniejące linie, które były od konkretnego autora. Powiedzmy na przykład, że Tony pracował nad moim projektem i chciałem znaleźć wszystkie linie w mojej gałęzi rozwoju, które wciąż istnieją i pochodziły z zatwierdzenia autorstwa Tony'ego?Znajdź wszystkie aktualne linie zmodyfikowane przez autora

+0

Co robi to, co chcesz różnić się od 'git winy 'zapewnia? – wnoise

+1

@Wnoise Szukam sposobu, aby w zasadzie wyszukać git winy za wszystkie pliki i po prostu grep tylko dane wyjściowe dla konkretnego autora. – stevebot

Odpowiedz

7

Może po prostu git blame FILE | grep "Some Name".

Albo jeśli chcesz rekurencyjnie winę + przeszukiwania wielu plików:

for file in $(git ls-files); do git blame $file | grep "Some Name"; done 

Lub jeśli szukasz jakiegoś innego wyjścia niż to, co można uzyskać z powyższego, należy rozważyć aktualizację pytanie być bardziej jednoznacznie o żądanym wyjściu.

Uwaga: Początkowo sugerowałem użycie poniższego podejścia, ale problemem, z którym można się z nim spotkać, jest to, że może również znaleźć pliki w katalogu roboczym, które nie są faktycznie śledzone przez git, a więc git blame niepowodzenie dla tych plików i przerwanie pętli.

find . -type f -name "*.foo" | xargs git blame | grep "Some Name" 
7

sideshowbarker jest głównie poprawne, ale stała druga komenda:

find . -type f -exec git blame {} \; | grep "Some Name" 

Choć wolałbym zrobić:

for FILE in $(git ls-files) ; do git blame $FILE | grep "Some Name" ; done | less