2012-10-04 5 views
6

Ho eseguito diversi refact in eclipse dove ho spostato un grande insieme di file in un altro pacchetto java. Questi spesso comportano l'aggiornamento automatico di molti file per risolvere i riferimenti. Quindi, i commit in questi casi tendono ad essere abbastanza grandi.Perché la cronologia del mio file git è stata persa dopo aver eseguito un refactoring di movimento in eclissi?

Supponevo che git seguisse i nomi e potessi usare git log --follow per seguire la cronologia attraverso la rinomina, ma git non tracciava i nomi.

Ho eseguito piccole operazioni di refactoring in eclissi in cui i nomi sono stati rilevati su commit. L'unica differenza sembra essere la dimensione dei commit.

Qualche idea?

+0

Per aggiungere a questo, sembra che il plug-in Eclipse EGit non abbia modo di specificare i valori -M o -l per git log (come citato da cdhowie). Quindi, dovrai colpire la CLI se vuoi usare quei flag. – Jonathan

+2

EGit (beh, JGit per la precisione) rispetta l'impostazione 'diff.renameLimit'. Il valore predefinito è 200, ma è possibile configurarlo su un valore più elevato nella configurazione globale o per repository di git. – robinst

risposta

7

Git non tiene traccia dei nomi nella cronologia, ma git log è in grado di rilevare in modo euristico i nomi in base ai contenuti del commit.

  • Potrebbe essere necessario specificare un basso -M per cento a git log in modo del cambiamento di nome da rilevare. Se è cambiata più della percentuale del file, git log (e git diff) non considererà una coppia di aggiunta/eliminazione come una rinomina. Se i file spostati erano molto piccoli e richiedevano modifiche al contenuto (ad esempio i nomi dei pacchetti), potrebbero superare questa soglia.
  • Potrebbe essere necessario specificare un valore per -l, che specifica il numero massimo di potenziali nomi da valutare. In grandi commit, si può benissimo superare questo, e quindi Git non valuta i nomi per mantenere troppo a lungo l'operazione di log. (Rilevare le ridenominazioni è un'operazione O (n^2), dove n è il numero di coppie di add/delete che devono essere considerate, quindi il tempo impiegato per elaborare ogni commit in un'operazione di log in cerca di rinomina aumenta esponenzialmente con il numero di aggiungere/cancellare permutazioni.)

Vedere la manpage di git-log per una descrizione più dettagliata di queste opzioni.

Problemi correlati