Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Kdiff3 won't open with mergetool command

I have conflicts, so I type:

git mergetool

I then get a message saying:

Hit return to start merge resolution tool

Normally when I do this, it open kdiff3 so I can merge the differences.

now when I do it, it just continues to the next file, and kdiff3 doesn't open at all.

I triple cheched my git config and my system path and all seems perfect. Config file is as follows:

 [merge]
    tool = kdiff3
 [mergetool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe
 [diff]
    guitool = kdiff3
 [difftool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe
 [core]
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor   autocrlf = true
 [user]
    name = James Farrell
    email = [email protected]
 [github]
    user = whygosystems
    token = 87d00c2e613b3a7c8c1be817b75b8a33
 [diff]
    external = C:/Program Files (x86)/Git/cmd/git-diff-wrapper.sh

Anyone have any ideas what might be wrong?

I have a feeling (though I could be wrong, that this has been a problem, since I installed the new Github windows client)....

like image 520
iKode Avatar asked Jun 04 '12 14:06

iKode


People also ask

How do I configure Kdiff3?

Add the kdiff3 installation directory to the Windows Path. Add TMP to the WSLENV Windows environment variable (WSLENV=TMP/up). The TMP dir will be used by git for temporary files, like previous revisions of files, so the path must be on the windows filesystem for this to work. Set TMPDIR to TMP in .

How do I add Kdiff3 to Sourcetree?

There are two settings in sourcetree in the Tools->options menu under the Diff tab where you need to set it to Kdiff3: the diff tool and the merge tool. Ensure that both of them are configured to used Kdiff3.

What is Mergetool?

DESCRIPTION. Use git mergetool to run one of several merge utilities to resolve merge conflicts. It is typically run after git merge. If one or more <file> parameters are given, the merge tool program will be run to resolve differences on each file (skipping those without conflicts).


4 Answers

I realize this is old, but for future googlers, KDiff3 also has an option where if the merge is trivial, it will resolve it silently and never even show a window.

I've had that happen to me in the past, so it might be what's happening for you. I think the option is called 'Auto save and quit on merge without conflicts'.

like image 192
Dan Avatar answered Oct 21 '22 00:10

Dan


I haven't used git for this purpose on Windows in a while, but your config file shows some interesting differences re: program strings.

[core]
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor   autocrlf = true

vs

[difftool "kdiff3"]
    path = c:/Program Files (x86)/KDiff3/kdiff3.exe

I suspect that there might be some issue with the spaces in the program name. Try setting your diff/mergetool executable paths to:

path = \"c:/Program Files (x86)/KDiff3/kdiff3.exe\"
like image 42
seth Avatar answered Oct 20 '22 22:10

seth


Again, for future Googlers:

As of version 2.48.02 (29 November 2014), Git Extensions started distributing the 64-bit version of kdiff3. (See https://github.com/gitextensions/gitextensions/blob/master/GitUI/Resources/ChangeLog.md#version-24802-29-november-2014.)

So if you're running a 32-bit OS and had the Git Extensions installer install kdiff3, your kdiff3 won't even run by itself. The solution is to download the 32-bit version (http://sourceforge.net/projects/kdiff3/files/kdiff3/) and reinstall. I didn't even need to uninstall the 64-bit version first, as the installer simply overwrote the previous install.

like image 2
Zack Martin Avatar answered Oct 20 '22 22:10

Zack Martin


Git has --auto hard coded as a command-line option to KDiff3, which causes the GUI not to show up if all conflicts are auto-resolvable by KDiff3.

We can change this default behavior by setting:

git config --global mergetool.kdiff3NoAuto.cmd "/c/Program Files/KDiff3/kdiff3.exe --L1 \"\$MERGED (Base)\" --L2 \"\$MERGED (Local)\" --L3 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\""

which result in the ~/.gitconfig file (or you can directly modify the file):

[merge]
        tool = kdiff3
[mergetool "kdiff3"]
        path = C:/Program Files/KDiff3/kdiff3.exe
        trustExitCode = false
        cmd = \"/c/Program Files/KDiff3/kdiff3.exe\" --L1 \"$MERGED (Base)\" --L2 \"$MERGED (Local)\" --L3 \"$MERGED (Remote)\" -o \"$MERGED\" \"$BASE\" \"$LOCAL\" \"$REMOTE\"
[diff]
        guitool = kdiff3
[difftool "kdiff3"]
        path = C:/Program Files/KDiff3/kdiff3.exe
        trustExitCode = false

In this way, the kdiff3 will alway open whether there is still unsolved conflicts left.

Ref: https://stackoverflow.com/a/15813064/2303761

like image 1
YaOzI Avatar answered Oct 21 '22 00:10

YaOzI