如何配置kdiff3而不是emerge作为git mergetool?

时间:2012-03-19 19:17:03

标签: macos git merge config kdiff3

我在mac OSX Snow Leopard上有Git,我试图编辑我的merge和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

显然有些东西不见了,但我做错了什么?

2 个答案:

答案 0 :(得分:132)

最近的Git版本内置了对kdiff3的支持,因此无需使用通用 cmd args 设置手动配置它。而是做:

$ git config --global merge.tool kdiff3

如果 PATH 环境中没有kdiff3,也可以:

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

这使git mergetool启动kdiff3。请注意there is no way将Git配置为自动在有冲突的手动合并后启动合并工具。

如果您真的想看看Git如何在内部调用kdiff3,请查看the built-in mergetool configuration for kdiff3

修改:对于现在也支持Mac OS X的Beyond Compare 4,只需与kdiff3交换bc3(是,“3”)并调整以上几行中的路径。从Git 2.2.0开始,您将能够使用bc作为bc3的别名,这样您就不必关心版本号了。

答案 1 :(得分:1)

  

最近的Git版本内置了对kdiff3

的支持

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

commit 2967284commit 7c10605David Aguilar (davvid)(2016年11月29日) Junio C Hamano -- gitster --在2016年12月16日commit c4a44e2合并)

  

mergetool:荣誉mergetool.$tool.trustExitCode内置工具

     

内置合并工具包含一个硬编码假设,即可以信任工具的退出代码来确定合并的成功与否。
  退出代码不受信任的工具可以在check_unchanged()函数中调用merge_cmd()

     

问题在于,内置工具不支持trustExitCode配置。

     

教授内置工具以兑现trustExitCode配置。

(见kdiff3

  

扩展run_merge_cmd(),以便当工具的退出代码无法信任时,它负责致电check_unchanged()
  从scriptlet中删除check_unchanged()次调用,因为它们不再负责调用它。