2015-08-31 35 views
7

Come trovo in git determinare tutte le linee ancora esistenti che provenivano da un autore specifico. Ad esempio, un Tony aveva lavorato al mio progetto e volevo trovare tutte le linee nel mio ramo di sviluppo che ancora esistono e provenivano da un commit che Tony ha scritto?Trova tutte le linee correnti modificate da un autore

+0

quello che fa ciò che si vuole essere diverso da quello che 'git colpa 'fornisce? – wnoise

+1

@wnoise Sto cercando un modo per cercare essenzialmente git blame per tutti i file e solo grep solo l'output per un autore specifico. – stevebot

risposta

7

Forse solo git blame FILE | grep "Some Name".

Oppure, se si vuole dare la colpa ricorsivamente + la ricerca in più file:

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

Oppure, se siete alla ricerca di un po 'di output diverso da quello che si otterrebbe da quanto sopra, si prega di prendere in considerazione l'aggiornamento alla domanda di essere più esplicito sull'output desiderato.

Nota: inizialmente avevo suggerito di utilizzare l'approccio seguente, ma il problema che si può incontrare è che potrebbe anche trovare file nella propria directory di lavoro che non sono effettivamente tracciati da git, e quindi lo git blame fallire per quei file e interrompere il ciclo.

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

sideshowbarker è per lo più corretta, ma un secondo comando fisso è:

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

Anche se io preferirei fare:

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