【问题标题】:Ediff as git difftoolEdiff 作为 git difftool
【发布时间】:2016-08-23 08:57:32
【问题描述】:

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

我遵循了这里提出的一些配置: Using ediff as git mergetool

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

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

apply: Wrong type argument: arrayp, nil

这很奇怪,因为此错误仅针对某些文件,而不是所有文件。

我对几个文件进行了实验,我认为经验法则如下: - 如果要比较的文件没有放在 git 根目录下,则失败。 - 否则,ediff 显示文件当前版本和指定修订版本之间的差异,没有任何问题。

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

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

非常感谢。 -鲍勃

【问题讨论】:

  • 嗯,是的,我知道 meld,但我更喜欢 ediff,因为它是我工作流程的一部分。我还在 emacs 中使用了 magit,它运行良好。但有时我想立即启动 diff 而不进入 magit,这就是我需要 ediff 的原因。

标签: git emacs emacs-ediff


【解决方案1】:

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

git config --global diff.tool ediff

并调用它

git difftool --tool=ediffclient master -- <file>

或类似的。 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\\\")\"

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

【讨论】:

  • 谢谢。我试过你说的,效果很好。问候
  • 很抱歉。我完全忘记了...谢谢
  • Unknown merge tool ediffclient fatal: external diff died, stopping
  • @Christoph90:如果编辑有帮助,请告诉我 - 谢谢!
  • 是的,包括.gitconfig 中的这些行使它对我有用。配置以前只有我的名字和电子邮件和 ediff 作为差异工具集。谢谢
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
相关资源
最近更新 更多