62

我在 mac OSX Snow Leopard 上有 Git,我尝试编辑我的合并和差异工具以使用 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

显然缺少一些东西,但我做错了什么?

4

2 回答 2

155

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

$ git config --global merge.tool kdiff3

如果kdiff3不在您的PATH环境中,请执行以下操作:

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

这使得git mergetool启动kdiff3。请注意,无法将 Git 配置为在发生冲突的手动合并后自动启动合并工具。

如果你真的想看看 Git 是如何在kdiff3内部调用的,请查看kdiff3 的内置 mergetool 配置

编辑:对于现在还支持 Mac OS X 的Beyond Compare 4,只需kdiff3bc3(yes, "3") 交换并调整上述行中的路径。从 Git 2.2.0 开始,您将能够将其bc用作别名,bc3这样您就不必关心版本号。

于 2013-01-16T13:21:32.090 回答
1

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

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

请参阅David Aguilar ( )的commit 2967284commit 7c10605(2016 年 11 月 29 日) 。(由Junio C Hamano 合并 -- --提交 c4a44e2中,2016 年 12 月 16 日)davvid
gitster

mergetoolmergetool.$tool.trustExitCode:内置工具的荣誉

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

这样做的一个问题是,内置工具不支持 trustExitCode 配置。

教内置工具遵守trustExitCode配置。

(见kdiff3

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

于 2016-12-22T22:27:57.267 回答