如何configurationkdiff3而不是emerge作为git mergetool?

我有Mac OSX Snow Leopard上的Git,我试图编辑我的合并和diff工具来使用kdiff3而不是emerge。

但是,当我尝试使用它不启动kdiff的GUI,并让我与基于cmd的界面。

我在gitconfig中的设置是:

[merge] tool = kdiff3 [mergetool "kdiff3"] cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3 args = $base $local $other -o $output trustExitCode = false [diff] tool = kdiff3 [difftool "kdiff3"] cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3 args = $base $local $other -o $output trustExitCode = false 

显然有一些缺失,但我做错了什么?

最近的Git版本内置了对kdiff3支持,所以不需要使用通用的cmdargs设置手动configuration它。 相反:

 $ git config --global merge.tool kdiff3 

如果kdiff3不在你的PATH环境中,也可以这样做:

 $ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3 

这使得git mergetool启动kdiff3 。 请注意, 无法将Gitconfiguration为在手动合并冲突后自动启动合并工具。

如果你真的想看看Git如何在内部调用kdiff3 ,请看看kdiff3 的内置的mergetoolconfiguration 。

编辑 :对于现在也支持Mac OS X的Beyond Compare 4 ,只需简单地用bc3 (是,“3”)交换kdiff3 ,然后调整上述行中的path。 从Git 2.2.0开始,你可以使用bc作为bc3的别名,这样你就不必关心版本号了。

最近的Git版本已经内置了对kdiff3的支持

是的,但只有Git 2.12(2017年第1季度)将允许这些内置工具信任其退出代码。

见David Aguilar( davvid )的 提交2967284 , 提交7c10605 (2016年11月29日) 。
(由Junio C gitster合并- gitster – in c4a44e2 ,2016年12月16日)

mergetool :为内置工具授予mergetool.$tool.trustExitCode

内置的合并工具包含一个硬编码假设,即关于是否可以信任工具的退出代码来确定合并的成功或失败。
退出代码不可信的工具在其merge_cmd()函数中包含对merge_cmd()调用。

与此有关的一个问题是,trustExitCodeconfiguration不符合内置工具。

教授内置工具以遵守trustExitCodeconfiguration。

(见kdiff3

扩展run_merge_cmd()以便在工具的退出代码不可信时负责调用check_unchanged()
从scriptlet中删除check_unchanged()调用,因为它们不再负责调用它。