Ich liebe undo-tree
(Screenshot unten). Es bietet eine einfache Möglichkeit für durch verschiedene Versionen einer Datei zu navigieren (oberes Fenster) durch den Benutzer bewegen lassen um die Geschichte Baum der Datei in einem separaten Fenster (unten Fenster) mit einfachen Tasten wie n
, p
und C-b
und C-f
auf Schalter über Nachkommen der gleichen Elternteil.
Am bemerkenswertesten, undo-tree
aktualisiert die Puffer die Datei mit der entsprechenden Version basierend auf der Auswahl in der Baumansicht zu halten, automatisch.
Natürlich magit
ist es phänomenal für Git, und es wäre erstaunlich, wenn es eine ähnliche Fähigkeit hätte, dh die Benutzer können interaktiv durch den Git- Verlauf einer Datei navigieren und gleichzeitig den Puffer aktualisieren, der die Datei automatisch enthält.
Ist das heute überhaupt möglich magit
?
quelle
undo-tree
verwendet einen Baum (es ist im Namen: -p), während Git-Verlauf ein gerichteter azyklischer Graph ist . Es könnte nicht trivial sein.Antworten:
Magit hat in letzter Zeit Unterstützung für so etwas erhalten, aber das Feature ist immer noch etwas rau und muss explizit aktiviert werden.
Eine ähnliche Funktion gibt es schon seit langer Zeit: Wenn Sie in einem Protokollpuffer von einem Commit zu einem anderen wechseln und in demselben Frame ein anderes Fenster als Revisionspuffer des Repositorys angezeigt wird, wird dieser Puffer aktualisiert, um das Commit anzuzeigen, anstatt das Commit auszuführen wurde zuvor gezeigt.
Bis vor kurzem wurde der Revisionspuffer erstellt, als Sie das erste Mal von einem Commit zu einem anderen verschoben haben. Ich habe dieses Verhalten geändert und jetzt wird der Revisionspuffer immer nur aktualisiert . Wenn in keinem Fenster desselben Frames bereits dieser Puffer angezeigt wird, wird der Puffer beim Bewegen im Protokoll nicht mehr in einem neuen Fenster oder in einem vorhandenen Fenster angezeigt, in dem zuvor ein anderer Puffer angezeigt wurde.
Jetzt müssen Sie einmal drücken SPC, um den Revisionspuffer anzuzeigen. Erst dann wird es aktualisiert, wenn Sie sich im Protokollpuffer bewegen.
Wenn Sie nicht möchten, dass der Revisionspuffer aktualisiert wird, gehen Sie wie folgt vor:
Wenn Sie andererseits auch möchten, dass der Revisionspuffer aktualisiert wird, wenn Sie sich im Statuspuffer bewegen, verwenden Sie Folgendes:
Es ist jetzt möglich, dass ein Blob-Puffer auf ähnliche Weise automatisch aktualisiert wird. Fügen Sie zuerst Folgendes hinzu:
Und vielleicht auch:
Drücken Sie dann in einem Protokoll- (oder Status-) Puffer RET, um den Revisionspuffer anzuzeigen oder zu aktualisieren und auch zu diesem Puffer zu wechseln. Gehen Sie zu der gewünschten Datei und drücken Sie RETerneut. Sie befinden sich jetzt in einem "Blob-Visiting" -Puffer, der einem Dateibesuchspuffer ähnelt, mit der Ausnahme, dass nicht die Datei im Arbeitsbaum, sondern die Datei wie in einem Commit aufgerufen wird.
Wechseln Sie zurück in den Protokoll- (oder Status-) Puffer und wechseln Sie zu einem anderen Commit. Der Blob-Puffer wird aktualisiert.
Beachten Sie, dass beim Anzeigen eines anderen Blobs der vorhandene Blob-Puffer nicht wiederverwendet wird. Stattdessen wird ein neuer Puffer erstellt, der diesen Blob aufruft und dann den Puffer in dem Fenster anzeigt, in dem zuvor der andere Blob-Puffer angezeigt wurde. Dieser andere Puffer wird nicht gelöscht, was leider zur Folge hat, dass sich in kurzer Zeit einige Puffer ansammeln können. Welches wäre eine dieser Ecken und Kanten, die ich bereits erwähnt habe. Durch Drücken qauf einen Blob-Puffer wird dieser gelöscht. Sie können also aufräumen, indem Sie zu dem Fenster gehen, in dem die verschiedenen Blob-Puffer angezeigt wurden, und qsolange drücken, bis alle Puffer gelöscht wurden.
Zusätzlich ist es möglich, aus einem Blob-Puffer mit pund zum nächsten oder vorherigen Blob zu navigieren n. Ich gehe davon aus, dass Sie in den meisten Fällen mit einem kürzlich aufgetretenen Blob beginnen und dann mithilfe von zu älteren Blobs zurückkehren p. Wenn Sie das tun und sich dann in die andere Richtung bewegen möchten, empfehle ich Ihnen q, den aktuellen Puffer zu löschen und damit zum vorherigen Puffer, dh zum nächsten Blob, zu wechseln .
Beachten Sie auch, dass Sie nicht erst eine Revision aufrufen müssen, um einen Blob aufzurufen. Sie könnten auch
M-x magit-find-file RET <revision> RET <file> RET
direkt verwenden, aber ich finde das weniger bequem.quelle
20151014.231
(spätestens soweit ich das beurteilen kann). Ich habe versucht, die oben beschriebenen Schritte auszuführen. Ich ging inmagit-log-buffer-file
denen ich den Commits navigieren kann nach oben und unten mitn
undp
aber wenn ich drückeSPC
oderRET
auf einem von ihnen erhalte ich:Symbol's value as variable is void: magit-blame-mode
magit-blame-maybe-update-revision-buffer
ummagit-section-movement-hook
durch Fehler.