Ediff作为git difftool

Bob*_*b V 5 git emacs emacs-ediff

我正在尝试使用emacs ediff作为git difftool.

我已经遵循了这里提出的一些配置: 使用ediff作为git mergetool

当谈到某个文件的不同git版本之间的比较时,我完全没有问题:ediff运行良好,两个版本之间的差异被正确描述.

但是,当我尝试运行git difftool来比较文件的当前目录版本与某个git版本时,我遇到了问题.对于某些文件,我收到以下错误:

apply: Wrong type argument: arrayp, nil

这很奇怪,因为这个错误仅适用于某些文件,而不是所有文件.

我已经尝试了几个文件,我认为经验法则如下: - 如果要比较的文件没有放在git根目录中,那么它就失败了. - 否则,ediff会显示当前版本的文件与指定的修订版本之间的差异,没有任何问题.

我尝试过上面提到的链接中解释的一些配置.所有这些都给了我相同的结果:git difftool在将非root git文件的当前目录版本与某个git版本进行比较时失败.

知道如何解决这个问题吗?

非常感谢.-Bob

Nic*_*ckD 6

Git 知道许多标准的 diff/merge 工具,包括 ediff/emerge。尝试

git config --global diff.tool ediff
Run Code Online (Sandbox Code Playgroud)

并调用它

git difftool --tool=ediffclient master -- <file>
Run Code Online (Sandbox Code Playgroud)

或类似。ediffclient将使用 emacsclient 而不是启动一个新的 emacs,我更喜欢 YMMV。

编辑(回应评论):如果 git 抱怨 edifftool,请尝试将以下内容添加到您的全局 git 配置文件 ( $HOME/.gitconfig):

[difftool "ediff"]
          cmd = emacs --eval \"(ediff-files \\\"$LOCAL\\\" \\\"$REMOTE\\\")\"
[difftool "ediffclient"]
          cmd = emacsclient --eval \"(ediff-files \\\"$LOCAL\\\" \\\"$REMOTE\\\")\"
Run Code Online (Sandbox Code Playgroud)

我的印象是这些设置是安装的一部分,但也许我错了(或者可能在更新版本的 git 中发生了变化)。当我找到一些时间时,我会尝试更深入地挖掘。