Also habe ich eine Datei namens one.txt
die ich im Laufe der Jahre auf Master Branch modifiziert habe. gitk one.txt
zeigt den gesamten Verlauf dieser einen bestimmten Datei an. Allerdings nachdem ich gewechselt habe one.txt
=> two.txt
, gitk two.txt
zeigt keine Änderung vor der Umbenennung.
Ich habe es versucht gitk --follow two.txt
gab aber nur den Kommentar für jeden Commit an, aber nicht die eigentlichen Dateiänderungsinformationen.
Ich weiß, dass ich es kann git log --follow two.txt
aber du musst gitk
jeder SHA1-Wert zu jedem, was geändert wird.
Also irgendwelche Tipps?
Das Problem ist gitk --follow
wird vorerst davon abweichen git log --follow
wenn man bedenkt, laut Linux Torvalds, --follow
ist hauptsächlich ein Hack:
Ich bin mir ziemlich sicher, dass ich genau dieses Problem erwähnt habe, als ich die ursprünglichen Follow-Patches gepostet habe, und es läuft im Grunde darauf hinaus: „--follow
” ist ein totaler Hack und tut es nicht Verwenden Sie die reguläre Commit-Filterfunktion und als Ergebnis ausgefallene Dinge wie “--parent
„komme nicht wirklich gut damit zurecht.
IOW, ich bin mir überhaupt nicht sicher, ob es reparabel ist. “--follow
ist eine sehr grundlegende Sache, die man machen kann, und es ist wirklich ein kompletter Hack. Es ist ziemlich klein hack – wenn du es nicht besser wüsstest und dir den Quellcode angesehen hast, könntest du denken, dass es ganz natürlich in Git passt. Aber nein.
Nun, es ist möglich, dass wir uns hacken könnten --parent
arbeiten mit --follow
auch, aber ehrlich gesagt weiß ich nicht wie. Weil die --follow
Hack läuft im Grunde auf Folgendes hinaus:
- tun nicht überhaupt Commits kürzen (dies ist das, was normalerweise die Elternschaft vereinfacht und uninteressante Commits entfernt)
- für die gesamte Liste der normalen Commits in “
git log
“, führen Sie die Patch-Generierung mit einem magischen Spezial-Hack durch, der nach Umbenennungen sucht.
- Wenn es sich um eine Umbenennung handelte, ändern Sie den Pfad, den wir auf magische Weise verfolgen, sodass wir beim nächsten Commit, das wir uns ansehen, dem neuen (älteren) Pfad folgen.
- wenn der Patch leer ist, erzwingen wir das Verbergen des Commit (intern ist dies der “
rev->always_show_header = 0;
” Ding)
und der Schlüssel hier ist, dass wir die ganze Magie am machen Ende aus der Warteschlange, lange nachdem wir das Pruning von Commits durchgeführt haben, das normalerweise die Umbenennung der Elternschaft durchführt.
Es tut uns leid. Ich habe benutzt --follow
gelegentlich, aber es ist ein Hack, “ok, da wurde es umbenannt” zu sehen. Es wäre schön, wenn “gitk --follow <pathname>
” hat gut funktioniert, aber es ist einfach nichts, was mich sehr interessiert.
Werfen Sie einen Blick auf stackoverflow.com/a/25090142/549246 … Ich habe einen kleinen Einzeiler geschrieben, der das tut, was Sie wollen.
– Brian Vandenberg
1. August 2014 um 23:47 Uhr