How can I make WinMerge my git mergetool?

I’m trying to integrate WinMerge with Git as I’ve seen others done before on Windows 7 Ultimate.

I’ve followed the following steps, but an error continues to show up when I do a git mergetool which defaults to vimdiff.

  • Git difftool not opening sometimes
  • git-difftool: full file tree compare using meld?
  • opendiff ( FileMerge ) stopped working with git on Mac OS X
  • git difftool, open all diff files immediately, not in serial
  • Git difftool — how to ignore images?
  • Compare and Edit Branches in Git with a Mergetool
  • Created a file called winmerge.sh in the root directory of git: C/Program Files (x86)/Git/ with: WinMergeU is the correct location.

    #!/bin/sh
    echo Launching WinMergeU.exe: $1 $2
    "C:/Program Files (x86)/WinMerge/WinMergeU.exe" 
    git /e /u /dl "Base" /dr "Mine" "$1" "$2"
    

    and used the following commands.

    git config --global diff.tool winmerge
    git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
    git config --global difftool.prompt false
    

    The error shows up as:

    git config option merge.tool set to unknown tool: winmerge
    

    I’ve been struggling to find a solution for the past several months. If anyone can help me fix this, it would be greatly appreciated! Any more questions about my computer, let me know.

  • What's the difference between git reset --hard and git reset --merge
  • How to get another branch instead of default branch with go get
  • How git makes branching not to be feared?
  • Git remote branches missing when cloning via http, but available when cloning locally in the remote machine
  • How to use .jar tool BFG Repo Cleaner and reduce git repository?
  • Changes in git working directory refuse to be reverted
  • 8 Solutions collect form web for “How can I make WinMerge my git mergetool?”

    You are talking about merge tool, yet you (and some other people with answers) are configuring it as a diff tool.

    To configure a merge tool, you’d need to use merge.tool and mergetool configurations instead of diff.tool and difftool, like this:

    git config --global merge.tool winmerge
    git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
    git config --global mergetool.prompt false
    

    And then you can use

    git mergetool
    

    which will open you the two files to edit.

    Kudos for @dvdvck mentioning in the comments that in command line parameters you can specify a third file for the result file for winmerge (outputpath parameter).

    For completeness, I’ll mention that there is also this gist aimed at full configuration of winmerge for both as diff and merge tool.

    If you decide to use SourceTree (or for any Google searchers with SourceTree), you can use WinMerge for the Merge Tool by setting the Merge Tool to custom, pointing Diff Command to WinMergeU.exe, typically:

    C:\Program Files (x86)\WinMerge\WinMergeU.exe
    

    In Arguments use:

    -e -u -dl "Mine" -wr -dr "Theirs" $LOCAL $REMOTE $MERGED
    

    That will cause the left side (labeled “Mine”) to be editable and it will be the output file when you save in WinMerge. The right side (labeled “Theirs”) will be read only (that’s the -wr argument), this is needed because WinMerge outputs all saved files to the $MERGED file, so if both sides were edited, it would output the left side then overwrite that with the right side; best to avoid that kind of confusion.

    If you leave the backup file option turned on, WinMerge will generate a .bak file. The contents of this file will either be the original left side file, or the second to last output file if you saved multiple times. You can either turn this off, or add *.bak to your .gitignore file.

    Git itself will create a *.orig conflict file AFTER the conflict is resolved, just in case you botched it. Again, you can add *.orig to your .gitignore file or turn off this feature. Unfortunately, SourceTree does not have a GUI option for this, so fire up your git bash or, if you chose the right PATH option during installation, the Windows Command prompt and do this:

    git config --global mergetool.keepBackup false
    

    That will stop Git creating the *.orig files. You can also directly edit the config file by locating the .gitconfig file in the root of your user directory. If you know how to use VIM, you can edit the whole thing with this command:

    git config --global --edit
    

    Git 2.5+ (Q2 2015) will include Winmerge as a known git mergetool!

    If Winmerge is in your %PATH%, a git config merge.tool winmerge is all you need to do!
    (It works for diff tool too: git config diff.tool winmerge)

    See commit 3e4f237 by David Aguilar (davvid), 20 May 2015.
    (Merged by Junio C Hamano — gitster — in commit 324a9f4, 01 Jun 2015)
    Helped-by: Philip Oakley (PhilipOakley), Johannes Schindelin (dscho), Sebastian Schuberth (sschuberth), SZEDER Gábor (szeder)

    All the config is now done for you directly in Git itself, with mergetools/winmerge:

    • diff command: "$merge_tool_path" -u -e "$LOCAL" "$REMOTE"
    • merge command: "$merge_tool_path" -u -e -dl Local -dr Remote "$LOCAL" "$REMOTE" "$MERGED"

    mergetools: add winmerge as a builtin tool

    Add a winmerge scriptlet with the commands described in this thread, so
    that users can use winmerge without needing to perform any
    additional configuration.

    Here’s mine (in %userprofile%\.gitconfig, or ~/.gitconfig on *nix), no wrapper (Win 7 Home Pro):

    [diff]
        tool = winmerge
    [difftool "winmerge"]
        cmd = c:/path/to/winmergeu.exe -e -u -x -wl -wr -dl "base" -dr "mine" \"$LOCAL\" \"$REMOTE\"
    

    This is easier to do and is what worked for me:

    git config --global diff.tool winmerge
    
    git config --replace --global difftool.winmerge.cmd "\"C:\path to winmerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
    
    git config --global difftool.prompt false
    

    Your path is incorrect, it should be "/c/Program Files (x86)/WinMerge/WinMergeU.exe".

    You’re running in a shell script environment, not native windows command prompt.

    After hassling with this for over an hour, I installed tortoisegit and so far it’s giving me exactly what I want.

    Settings of Winmerge for Tortoise git are described in http://thoai-nguyen.blogspot.com.au/2012/03/setup-tortoise-git-and-winmerge.html

    Example:

    git config --global --add diff.tool winmerge
    git config --replace --global difftool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" $LOCAL $REMOTE"
    git config --global difftool.prompt false
    
    Git Baby is a git and github fan, let's start git clone.