gitk-Äquivalent von git log –follow

Lesezeit: 2 Minuten

Benutzer-Avatar
niemand

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.txtgab 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.txtaber du musst gitk jeder SHA1-Wert zu jedem, was geändert wird.

Also irgendwelche Tipps?

  • 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

Das Problem ist gitk --follow wird vorerst davon abweichen git log --followwenn 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.

  • Seufz … immer der Idiot, der er ist. Er sollte sich darum kümmern >.<

    – niemand

    23. Juli 2011 um 5:17 Uhr

  • Ich nehme an, es gibt keine Updates dafür … @qin hast du zumindest Git Extensions ausprobiert? Es ist --follow scheinen gut zu funktionieren.

    – Cregox

    5. Juli 2012 um 18:05 Uhr

  • @Cawar keine Entwicklung, die ich in den Protokollen von git (github.com/git/git/tree/master/Documentation/RelNotes).

    – VonC

    5. Juli 2012 um 18:14 Uhr

  • Ich eröffne fast eine neue Frage, Von … Das war bisher das Beste, was ich dem Warum näher kam --follow folgt einer Datei nicht richtig, on git (nicht gitk). Binärdatei, falls das wichtig ist. Hätten Sie dazu Hinweise? 😛

    – Cregox

    5. Juli 2012 um 18:18 Uhr

  • @Cawar im Moment kein Hinweis, aber bedenke es --follow basiert auf einem Diff-Mechanismus (stackoverflow.com/questions/3520023/…), von dem ich bezweifle, dass er für Binärdateien funktioniert (mit „binary diff“: stackoverflow.com/a/4705537/6309).

    – VonC

    5. Juli 2012 um 18:21 Uhr


1258000cookie-checkgitk-Äquivalent von git log –follow

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy