2012-06-18 9 views
5

Mi piacerebbe scoprire tutti gli autori che hanno cambiato una riga di codice. Git-log può farlo a livello di file. Ho letto la pagina man e sembra che git log non possa farlo a livello di linea. C'è un modo per usare il comando git per farlo o ho bisogno di scrivere uno script per me stesso?puoi scoprire tutti gli autori che hanno mai cambiato una riga di codice?

Per il mio scopo, vorrei farlo a tutte le righe di codice. Lo sto facendo per produrre dati sull'autorship per la mia ricerca.

+2

Puoi dare la colpa/annotazione per ottenere le informazioni a livello di revisione. "Chi ha cambiato una linea" inizia a diventare una domanda confusa quando si apportano più revisioni. –

+0

Qual è il punto di questo? –

+0

@Tomasz: È abbastanza utile per cercare la cronologia di una particolare linea, in particolare quando si sta cercando di vedere per quanto tempo è esistito un bug nella base di codice o chi ha toccato una particolare funzione. – Christopher

risposta

3

Si desidera combinare i flag -S e --pretty su git log.

Dalla pagina git log uomo, la ricerca -S piccone:

-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. 

Questo flag cerca tutte le modifiche a una particolare stringa. Using an example from another SO answer,git log -g -Ssearch_for_this cerca nella cronologia tutte le modifiche a "search_for_questo".

Combinalo con --pretty per ottenere risultati migliori. Ad esempio, questo comando potrebbe cercare nella cronologia di modifiche al 'foo' e riprendere l'hash accorciato, seguito dall'autore, due trattini, la prima riga del messaggio, due linee e la 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

Vuoi dire mettendo il contenuto della linea dopo l'opzione -S? Questo può aiutarmi a scoprire il commit cambiando la stringa, ma ho ancora bisogno di trovare la forma precedente della linea e continuare a utilizzare il metodo fino a quando non ci sono versioni precedenti della linea? – user1440858

+0

Hmmm. Sì. Questa soluzione ti porterà al punto in cui è stato introdotto . Se vuoi tenere traccia di quella modifica, non funzionerà. Forse questo? https://github.com/renard/git-line-history Trovato tramite google. Non ho idea se funzioni, ma fa leva su 'git blame'. – Christopher

Problemi correlati