将magit与undo-tree结合使用可轻松进行历史导航


16

我爱undo-tree(下面的截图)。它提供了一种简单的方法为通过让周围的文件的历史记录树中的用户移动在单独的窗口(窗口底部),用简单的按键,比如通过不同版本的文件(顶部窗口)的航行npC-bC-f到开关跨相同的后代父母

最值得注意的是,undo-tree根据树视图中的选择,使用相应的版本自动更新保存文件的缓冲区。

当然,magit对于git来说是惊人的,并且如果它具有类似的功能,那将是惊人的,即让用户以交互方式浏览文件的git历史记录,同时自动更新保存文件的缓冲区。

magit今天有可能吗?

在此处输入图片说明


不知道magit是否可行,但请访问github.com/pidu/git-timemachine
clemera 2015年

我不确定,但是我认为undo-tree使用的是一棵树(以:-p为名),而Git历史记录是有向无环图。这可能是不平凡的。
suvayu 2015年

2
Magit确实支持这样的功能,但是我目前正在更改该功能的打开方式。完成后,我会发布答案。
tarsius

Answers:


7

Magit最近获得了诸如此类的支持,但是该功能仍然有些粗糙,必须显式启用。


类似的功能已经存在很长时间了-当您在日志缓冲区中将一个提交移到另一个提交时,并且同一框架中的另一个窗口是存储库的修订缓冲区,然后刷新该缓冲区以显示该提交而不是它的任何提交以前显示。

直到最近,当您第一次从一个提交移到另一个提交时,才创建修订缓冲区。我已经更改了该行为,现在修订缓冲区仅被更新。如果同一帧中没有窗口已显示该缓冲区,则在日志中移动将不再导致该缓冲区显示在某些新窗口或以前显示某些其他缓冲区的现有窗口中。

因此,现在您必须按SPC一次以显示修订缓冲区。只有这样,当您在日志缓冲区中移动时,它才会开始更新。

如果您不希望更新修订缓冲区,请执行以下操作:

(remove-hook 'magit-section-movement-hook
             'magit-log-maybe-update-revision-buffer)

另一方面,如果您还希望在状态缓冲区中移动时修订版本缓冲区,请使用以下命令:

(add-hook 'magit-section-movement-hook
          'magit-status-maybe-update-revision-buffer)

现在可以以类似的方式自动更新Blob缓冲区。首先添加:

(add-hook 'magit-section-movement-hook
          'magit-log-maybe-update-blob-buffer)

也许还有:

(add-hook 'magit-section-movement-hook
          'magit-status-maybe-update-blob-buffer)

然后,在日志(或状态)缓冲区内部,按RET以显示或更新修订缓冲区,并切换到该缓冲区。移至您感兴趣的文件,然后RET再次按。您现在位于“ blob-visiting”缓冲区中,该缓冲区类似于文件访问缓冲区,除了它不访问工作树中的文件而是访问某些提交中的文件之外。

切换回日志(或状态)缓冲区,然后移至另一个提交。Blob缓冲区正在更新。


请注意,显示另一个Blob实际上不会重用现有的Blob缓冲区。相反,它将创建一个访问该Blob的新缓冲区,然后在先前显示另一个Blob缓冲区的窗口中显示该缓冲区。该其他缓冲区没有被删除,不幸的是,这意味着很多缓冲区可以在短时间内累积。我之前提到过,这将是那些粗糙的边缘之一。按下qBlob缓冲区确实会将其删除,因此您可以通过转到用于显示各种Blob缓冲区的窗口进行清理,并一直按q直到删除所有缓冲区为止。

另外,可以使用p和从Blob缓冲区中导航到下一个或上一个Blob n。我认为在大多数情况下,您是从最近的Blob开始,然后使用移回旧的Blob p。如果这样做,然后又想朝另一个方向移动,建议您使用qkill杀死当前缓冲区,从而移至上一个缓冲区,即下一个 blob。

另外请注意,您不必先访问修订版就可以访问Blob。您也可以M-x magit-find-file RET <revision> RET <file> RET直接使用,但是我发现不太方便。


谢谢你tarsius。我正在与magit合作20151014.231(据我所知,这是最新的)。我尝试按照上述步骤操作。我去了, magit-log-buffer-file它允许我上下浏览提交np但是当我按下SPC或按下RET其中一个时,我得到:Symbol's value as variable is void: magit-blame-mode
Amelio Vazquez-Reina 2015年

您可能是误添加magit-blame-maybe-update-revision-buffermagit-section-movement-hook
tarsius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.