webentwicklung-frage-antwort-db.com.de

Warum zeigt git log möglicherweise keinen Verlauf für eine verschobene Datei an und was kann ich dagegen tun?

Ich habe einige Dateien mit git mv Umbenannt, git stash Verwendet, HEAD (ohne es zu ändern)] kurz angesehen und dann git stash pop, um das ganze Los wieder zurückzubekommen. Meine Züge waren von der Festschreibungsliste verschwunden, daher habe ich sie mit git rm erneut korrigiert und in der Festschreibungsmeldung wurde behauptet, git hätte die Umbenennung als Umbenennung erkannt es.

Aber jetzt, nach dem Festschreiben, komme ich nicht zum Verlauf der verschobenen Dateien! Folgendes sagt Git zu dem fraglichen Commit:

~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.h
 delete mode 100644 test/R_DebugUI_iOS.m
 create mode 100644 system/runtime/src/R_DebugUI_iOS.h
 create mode 100644 system/runtime/src/R_DebugUI_iOS.m

 <<snip older commits>>
 ~/projects%

Ich versuche jetzt, den Verlauf einer dieser verschobenen Dateien abzurufen, damit ich mir eine alte Version ansehen kann, aber ich erhalte nichts sehr Nützliches:

~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime
~/projects/system/runtime/src% 

(Ich habe es auch ohne -M, -C Und --find-copies-harder Versucht, aber ohne Erfolg.)

Ich kann seine Geschichte unter seinem alten Namen abrufen, der an dem Punkt endet, an dem er von seinem alten Standort gelöscht wurde:

~/projects% git log --summary --follow --find-copies-harder -M -C -- test/R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date:   Wed Dec 8 22:37:54 2010 +0000

    Moved R_DebugUI into runtime

 delete mode 100644 test/R_DebugUI_iOS.m

commit 32a22d53c27e260714f759ecb3d3864e38b2e87f
Author: brone
Date:   Tue Dec 7 23:52:51 2010 +0000

    Can set debug UI's alpha.

<<snip older commits>>
~/projects%

Ich stecke dieses Mal nicht ganz fest, aber ich hätte keine Lust, so etwas die ganze Zeit machen zu müssen. (Ich gehe davon aus, dass es eine angemessene Anzahl von Dateien gibt, die mindestens einmal in ihrem Leben verschoben werden.)

Mache ich etwas falsch? Die alte und die neue Kopie der Datei sind zu 98,8% identisch (2 von 166 Zeilen wurden geändert). Meines Wissens sollte git in diesem Fall die Datei verfolgen können, da es Umbenennungsoperationen einleitet, anstatt sie explizit zu speichern, und die Dateien sind ähnlich genug, so dass ich der Meinung bin, dass es sie als gleich betrachten sollte.

Kann ich irgendetwas tun, um das zu beheben?

79

Beantwortung meiner eigenen Frage, da ich es geschafft habe, meine Bedenken zu zerstreuen, auch wenn ich mein Problem nicht genau gelöst habe. (git log --follow funktioniert bei mir aber immer noch nicht.)

Erstens ist die --summary Protokoll für das Umbenennungs-Commit enthält die Zeile delete mit dem alten Namen der Datei. Also, wenn es leicht zu erkennen ist, finden Sie seinen alten Namen und git log von dort.

Wenn es Teil eines großen Commits ist und daher etwas schwieriger zu erkennen ist - und diese Situation war eine meiner Sorgen - git blame -C kann mit dem neuen Namen der Datei bei der ersten Überarbeitung nach dem Umbenennen verwendet werden. Vermutlich bleiben Zeilen aus der Originaldatei! - Also sollte git die Quelle finden und den alten Dateinamen anzeigen (und einen Commit-Hash für ein gutes Maß). Sie können den Weg dann mit git log.

Wenn Sie also Interesse an der Historie der Datei als Einheit haben (aus welchem ​​Grund auch immer), kann dies anscheinend relativ unkompliziert geschehen. Obwohl ich den Eindruck habe, dass du es lieber richtig benutzt hast.

14

Bitte versuchen Sie es mit git log --follow in Ihrer Datei. Ich lerne von hier Ist es möglich, Dateien in Git zu verschieben/umzubenennen und deren Verlauf zu pflegen?

103
liang

Nun, ich sehe meine Umbenennungen mit git log -M --summary ..

25
user502515
git log --follow ./path/to/file

Ich glaube, das ist was du suchst.

7
janetkuo