Domanda

sto per spostare una tonnellata di file intorno a un progetto esistente. Prima di fare questo, mi piacerebbe avere una solida conoscenza su alcune tecniche utilizzate per analizzare il codice che ha una storia multi-file.

Come posso utilizzare git per chiedere: "dove questa riga di codice viene da" quando il contenuto è spostato attraverso più file in essa contenuti del tempo di vita?

Lo so git non tiene rinomina in modo esplicito (per una buona ragione) in modo che sembra che dovrei essere in grado di chiedere questo, io non sono sicuro di come solo. Se ci sono il metodo di visualizzare questa che sarebbe bello sapere troppo.

È stato utile?

Soluzione

Vorrei raccomandare a guardare tre strumenti nella casella degli strumenti git. Il primo è colpa, che è molto simile come in cvs. Esso mostra che impegnano ultima toccato ogni riga in un file. Se si vuole guardare vedere quello che c'era prima, si può prendere il commit che ha toccato la linea e guardare il commit precedente.

git show <sha1_of_interesting_commit>^ -- file/path

È possibile ripetere la colpa per vedere quello che è successo prima.

git blame <sha1_of_interesting_commit>^ -- file/path

Il secondo strumento sta usando --follow per tenere traccia dei file passato rinomina.

git log --follow -- file/path

Il terzo - e forse lo strumento più utile - è l'opzione piccone per il login. Questo cerca la storia per le modifiche le linee rimossi, introdotti o modificati che includono un dato po 'di testo. Ciò è particolarmente utile per il monitoraggio cose come i nomi delle funzioni. Può essere di nuovo in un file in un particolare impegno, ma lo ha fatto venire da un file di origine diversa? Era una chiamata ad esso aggiunto, allo stesso tempo, o prima si muoveva?

git log -S"Interesting_Function"

Se si sta utilizzando una patch o stat opzione (per esempio -p o --stat) l'uscita sarà limitato a quei file i cui cambiamenti in realtà coinvolto la stringa di ricerca a meno che non si utilizza anche --pickaxe-all in cui viene visualizzato l'intero cambiamento.

In combinazione con git grep per mostrare dove tutte le occorrenze di una stringa attuali sono, piccone è uno strumento di storia mineraria estremamente utile.

Altri suggerimenti

git blame è quello che si usa per chiedere "dove ha fatto questa riga di codice viene?". Non so se si gestisce rinomina. Probabilmente fa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top