如果我想查看foo.bar
在某个提交<COMMIT_ID>
中的样子,那么我可以调用:
git show <COMMIT_ID>:foo.bar
很好......我怎样才能在emacs
中这样做?使用magit
?使用vc
?说我正在访问文件foo.bar
,我想查看它在<COMMIT_ID>
中的显示方式。
答案 0 :(得分:27)
在Emacs中执行此操作的规范方法是使用VC:来自文件缓冲区的C-x v ~
将要求您进行修订,然后将该文件显示为该修订版本。它应该适用于VC支持的任何控制系统,例如Git,Bzr,......
答案 1 :(得分:21)
这已经绑定到log-view-find-revision
,如果我们查看代码,我们会看到关键位是:
(switch-to-buffer (vc-find-revision file revision)))
所以我们可以将它包装在一个自定义函数中:
(defun my-vc-visit-file-revision (file revision)
"Visit FILE as it was at REVISION."
(interactive
(list (expand-file-name
(read-file-name (if (buffer-file-name)
(format "File (%s): " (file-name-nondirectory
(buffer-file-name)))
"File: ")))
(read-string "Revision: ")))
(require 'vc)
(switch-to-buffer
(vc-find-revision file revision)))
编辑:Stefan提供了一个更好的答案,但是如果您希望能够选择文件以及修订版本,这里是我的函数版本,它维护交互式文件选择,但使用来自{的代码{1}}用于修订处理。
我的结论是默认情况下使用other-window确实更有意义,所以我在这里也做了同样的事情 - 除非你提供了一个前缀参数,在这种情况下它会使用当前窗口。
vc-revision-other-window
答案 2 :(得分:8)
有一个名为git-timemachine
的软件包,它使查看文件以前版本的过程几乎完全无缝;请参阅安装说明和演示的链接。 (如果您已经在使用MELPA,只需执行 M-x package-install
RET git-timemachine
RET )。
它的工作方式是,从访问跟踪文件的缓冲区中调用 M-x git-timemachine
RET 。然后你可以:
p
访问之前的历史版本n
访问下一个历史版本w
复制当前历史版本的缩写哈希值W
复制当前历史版本的完整哈希值q
退出时间机器。
请注意,如果您知道要访问的提交的哈希值,那么来自@ phils&#39;的自定义命令解决方案将为您的特定用例提供更好的服务。但是对于文件的不同版本之间的导航,我发现使用git-timemachine
比使用VC提供的功能更容易。
您当然可以将git-timemachine
绑定到您选择的键绑定。
答案 3 :(得分:7)
如果您正在查看magit中的提交,只需按文件或您感兴趣的文件的一部分即可输入。