Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Using WinMerge as the git Diff/Merge Tool on Windows 64bit
[mergetool]
prompt = false
keepBackup = false
keepTemporaries = false
[merge]
tool = winmerge
[mergetool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e -dl \"Local\" -dr \"Remote\" $LOCAL $REMOTE $MERGED
[diff]
tool = winmerge
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE
@MagicUnderHood
Copy link

MagicUnderHood commented May 27, 2017

Thanks!

@edcolcode
Copy link

edcolcode commented Jun 3, 2017

Thanks!

@zalizko
Copy link

zalizko commented Aug 3, 2017

Spasibo!

@Pagliacii
Copy link

Pagliacii commented Aug 8, 2017

Thanks! It worked now!

@bardware
Copy link

bardware commented Oct 15, 2017

I see a multitude of posts on stackoverflow describing how to use WinMerge as difftool. When a file is created or deleted WinMerge tries to access \\.\nul.
Does your solution address/handle that issue?

@maiconheck
Copy link

maiconheck commented Nov 19, 2017

Works for me, too. Thank you very much!

@robertocg72
Copy link

robertocg72 commented Dec 6, 2017

Very useful, thank you

@picasso250
Copy link

picasso250 commented Dec 12, 2017

you should use

git difftool

NOT git diff

this takes me quite a while

@hiteshkanchan
Copy link

hiteshkanchan commented Feb 1, 2018

I made this change in the .gitconfig. Now how do I specify the files for comparison once in Git Bash

@nonsocode
Copy link

nonsocode commented Mar 1, 2018

Awesome

@Tbd19
Copy link

Tbd19 commented Mar 15, 2018

Has anyone had problems with this configuration recently on Windows 10 Visual Studio 2017? I am getting this on the output; "Failed to start the configured compare tool. Using the default compare tool instead."

@angusmillar
Copy link

angusmillar commented Mar 20, 2018

Nice One!

@antru
Copy link

antru commented May 8, 2018

Thanks

@Carcinie
Copy link

Carcinie commented May 15, 2018

i'm getting the nul path error too

@Carcinie
Copy link

Carcinie commented May 15, 2018

Tbd19 I had the same problem. This is what i did.
git difftool --tool-help

It should tell you what the available diff tools are.
I did:
git config diff.tool winmerge

@tiago-aguiar-moreira
Copy link

tiago-aguiar-moreira commented Jun 29, 2018

Very helpfull. Thanks!

@cored0wn
Copy link

cored0wn commented Jul 9, 2018

Thank you man!! 👏 🎉

@aequi42
Copy link

aequi42 commented Jul 10, 2018

Thank you a lot!

@mrsaleh
Copy link

mrsaleh commented Jul 28, 2018

Saved me a lot of time, thanks.

@RecoX
Copy link

RecoX commented Feb 5, 2019

Thanks

@k9t9
Copy link

k9t9 commented Mar 25, 2019

WinMerge was supposed to be a two-way diff ( pending WinMerge3 ) and not a three-way diff as git require. is that updated to 2.16 ( 3 way ) ?

@kpuru2
Copy link

kpuru2 commented Mar 26, 2019

Great

@jernkuan
Copy link

jernkuan commented Jun 25, 2019

This worked for me to test for empty file and fix the \nul\ problem

cmd = [[ $LOCAL != "/dev/null" ]] && "c:/Program\\ Files/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE

@mrstecklo
Copy link

mrstecklo commented Sep 4, 2019

Thanks to the author, but I suggest this set of options for mergetool/cmd:
-u -e -fm -wl -dl "Local" -wr -dr "Remote" $LOCAL $MERGED $REMOTE
This way MERGED file is in the middle pane, so you can apply changes directly from LOCAL or REMOTE. Additionally, LOCAL and REMOTE are marked "read only"

@sugardaddy
Copy link

sugardaddy commented Oct 9, 2019

I tried the diff settings above, but they didn't work for me. It was the path to winmerge that was not right syntactically. After trying a dozen combinations or so, I finally landed on one that worked.

I'm sure there is a version of the Windows long file name form that works, but I have stopped searching now. PROGRA~1 is the short DOS 8.3 folder name for the "Program Files (x86)" folder where my winmerge is located.

[diff]
    tool = winmerge

[difftool "winmerge"]
    name = WinMerge
    trustExitCode = true
    cmd = /c/PROGRA~2/WinMerge/WinMergeU.exe -u -e $LOCAL $REMOTE

I also tried just using tool=winmerge since that is supposed to be built-in, but it didn't work.

Tip: running this command would sometimes help me know if my path was not formatted correctly.
git difftool --tool-help

Me:

Windows 8
git version 2.21.0.windows.1

@jriley555
Copy link

jriley555 commented Dec 28, 2019

u r da man !!!! seems like i needed a diff.tool (vs difftool) entry to get this to work, though.

@christopherliu
Copy link

christopherliu commented Aug 12, 2020

Warning: This is right for diffs, but this will burn you if you use it for merges! I used this and had to redo my merge changes.

Use mrsteklo's version of the options above, or alternatively:

cmd = "/c/Program\\ Files\\ \\(x86\\)/WinMerge/WinMergeU.exe" -u -e -wl -wr $LOCAL $BASE $REMOTE -o $MERGED

@CAPeddle
Copy link

CAPeddle commented May 4, 2021

VS2019 Enterprise 16.9.4
Winmerge 2.16.8.0 x86

I could only get it to work like this:
[difftool "winmerge"]
name = WinMerge
trustExitCode = true
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -u -e \"$LOCAL\" \"$REMOTE\"

@OlivierChatagnon1707
Copy link

OlivierChatagnon1707 commented Sep 24, 2021

Thanks a lot CAPeddle !!
It's the only one working with Visual Studio 2019 and my winmerge 2.16.14.0

Additional thing to check: file MySolution.git\config (yes, the file name is "config" without extension):
Verify if you have:
[diff]
tool = winmerge

You can modify it with the following command (Visual studio Menu "Git"\Open in Command Prompt":
git config diff.tool winmerge

@mrnams
Copy link

mrnams commented Feb 12, 2022

Neither cmd = "C:\Program Files (x86)\WinMerge\WinMergeU.exe" nor
cmd = "/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe" worked for me.
It always show Visual Studio Diff tool and open in visual studio itself?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment