如何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
支持,所以不需要使用通用的cmd和args设置手动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不符合内置工具。
教授内置工具以遵守
trustExitCode
configuration。
(见kdiff3
)
扩展
run_merge_cmd()
以便在工具的退出代码不可信时负责调用check_unchanged()
。
从scriptlet中删除check_unchanged()
调用,因为它们不再负责调用它。