Reputation: 1325
I have Git on mac OSX Snow Leopard and I tried to edit my merge and diff tool to use kdiff3 instead of emerge.
But when I try to use it does not launch the GUI of kdiff and keeps me with a cmd based interface.
My setting in gitconfig are:
[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
There is obviously something missing but what did I do wrong ?
Upvotes: 64
Views: 50315
Reputation: 1328712
Recent Git versions have built-in support for kdiff3
Yes, but only Git 2.12 (Q1 2017) will allow those built-in tools to trust their exit code.
See commit 2967284, commit 7c10605 (29 Nov 2016) by David Aguilar (davvid
).
(Merged by Junio C Hamano -- gitster
-- in commit c4a44e2, 16 Dec 2016)
mergetool
: honormergetool.$tool.trustExitCode
for built-in toolsBuilt-in merge tools contain a hard-coded assumption about whether or not a tool's exit code can be trusted to determine the success or failure of a merge.
Tools whose exit codes are not trusted contain calls tocheck_unchanged()
in theirmerge_cmd()
functions.A problem with this is that the trustExitCode configuration is not honored for built-in tools.
Teach built-in tools to honor the
trustExitCode
configuration.
(See kdiff3
)
Extend
run_merge_cmd()
so that it is responsible for callingcheck_unchanged()
when a tool's exit code cannot be trusted.
Removecheck_unchanged()
calls from scriptlets since they are no longer responsible for calling it.
Upvotes: 1
Reputation: 29867
Recent Git versions have built-in support for kdiff3
, so there's no need to configure it manually using the generic cmd and args settings. Instead do:
$ git config --global merge.tool kdiff3
And if kdiff3
is not in your PATH environment also do:
$ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3
This makes git mergetool
launch kdiff3
. Note that there is no way to configure Git to automatically launch your merge tool after a manual merge that has conflicts.
In case you really want to see how Git is calling kdiff3
internally, take a look at the built-in mergetool configuration for kdiff3.
Edit: For Beyond Compare 4, which now also supports Mac OS X, simply exchange kdiff3
with bc3
(yes, "3") and adjust the path in the above lines. Starting with Git 2.2.0 you'll be able to use bc
as an alias for bc3
so that you do not have to care about the version number.
Upvotes: 158