How to use Winmerge with Git Extensions?
Asked Answered
D

5

60

I'm using Git Extensions and it pre-installs and sets up KDiff as the diff tool to solve merge conflicts. I'm very fond of Winmerge though and would like to replace KDiff with Winmerge.

In the Git Extensions settings, there are settings to change the Mergetool, but I can't seem to figure out what syntax I should use and why. There seem to be 4 variables: $BASE, $LOCAL, $REMOTE, $MERGED. It seems that I should pass these to WinMergeU.exe, but with which command line parameters?

I've tried to search for this a few times, but there is no answer that actually seems to work.

Doctrine answered 18/3, 2010 at 7:54 Comment(2)
Would #255702 or #1882094 help?Gossip
Check out my answer for the easiest, point-and-click solutionGermainegerman
V
58

Overview
The following is instructions on how to setup GIT Version Control so that you can use a better set of tools than the default installation. The setup requires that GIT Extensions is already installed and involves configuring Winmerge in GIT extensions.

Installation
Walk through all the prompts and install in the default directory for Winmerge.

Configure Winmerge in GIT Version Control
Open a new doc in a text editor. Copy/paste the following and save the document as "wMerge.sh" to your "C:\Program Files (x86)\Git\bin\" directory.

echo Launching WinMerge: $1 $2 "C:/Program Files (x86)/WinMerge/WinMergeU.exe" -e -u -dl "Original" -dr "Modified" "$1" "$2"

Goto your "Users->username" directory and locate the .gitconfig file. Open it in your favorite editor copy/paste the following code and Save:

[user]
    name = enter your name
    email = [email protected]
[core]
    autocrlf = false
[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = wMerge.sh \"$MERGED\" \"$REMOTE\"
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
[mergetool]
    keepBackup = false
    trustExitCode = false
[diff]
    guitool = winmerge
[difftool "winmerge"]
    path = c:/Program Files (x86)/winmerge/winmergeu.exe
    cmd = \"c:/Program Files (x86)/winmerge/winmergeu.exe\" \"$LOCAL\" \"$REMOTE\"

Run "GitExtensions", goto "tools->Settings->Git Extensions->Git Config". If you've done your installation properly and referenced the tools to their directory, your global settings page should look like below (NOTE: Please fill in your name on name and email):

mergetool: winmerge
path to mergetool: c:/Program Files (x86)/winmerge/winmergeu.exe
mergetool command: wMerge.sh "$MERGED" "$REMOTE"
difftool: winmerge
path to difftool: c:/Program Files (x86)/winmerge/winmergeu.exe
difftool command: "c:/Program Files (x86)/winmerge/winmergeu.exe" "$LOCAL" "$REMOTE"

line endings: checkout as-is, commit as-is

Navigate to the checklist tab to verify that GIT is all "green" and satisfied with your setup.

Valer answered 18/11, 2011 at 22:48 Comment(3)
I placed wMerge.sh in /Git/bin/ but I'm getting this: /mingw64/libexec/git-core/git-mergetool--lib: line 133: wMerge.sh: command not foundVociferous
Add -r option to winmerge to enable tree view and flat list view of differering files. Otherwise you are stuck in One Folder At A Time view. cmd = "'c:/Program Files (x86)/winmerge/winmergeu.exe'" -r "$LOCAL" "$REMOTE"Brittain
Keep in mind newer versions of WinMerge not in the (x86) folderAccusatorial
G
25

On Git Extensions v2.47.3, it's really easy to set this up:

Settings -> Global settings -> in the drop-down for 'Mergetool' write manually: WinMerge and watch the miracle.

Same for 'Difftool' drop-down.

enter image description here

||   ||   ||
\/   \/   \/

enter image description here

It's just silly that the 'WinMerge' option isn't pre-populated in the dropdown. Oh well.

Germainegerman answered 30/5, 2014 at 22:11 Comment(2)
It is the easiest solution :)Dumbarton
In Git Extensions 3.0, the path to the setting is: Tools -> Settings -> Git -> ConfigLaurilaurianne
C
12

On windows 7, this is what finally worked for me. Note the "'c:/path/here'" quotes around my program files path.

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$MERGED"
[diff]
    tool = winmerge
[difftool "winmerge"]
    cmd = "'C:/Program Files (x86)/WinMerge/WinMergeU.exe'" -e "$LOCAL" "$REMOTE" -dl "Local" -dr
Cabrilla answered 20/3, 2013 at 14:10 Comment(1)
This solved my issue for Windows 10 an Visual Studio 2015. Thanks!Legalese
F
9

@sebastiaan's answer didn't work for me (maybe it is outdated?)

These are "Global settings" that work for me using GitExtensions 2.28:

Mergetool: winmerge
Path to mergetool: D:/path/to/WinMerge/WinMergeU.exe
Mergetool command: "D:/path/to/WinMerge/WinMergeU.exe" -e "$MERGED"
This causes WinMerge to use the "conflict file" generated by git.
-e allows pressing ESC to close winmerge.

Difftool: winmerge
Path to difftool: D:/path/to/WinMerge/WinMergeU.exe
Difftool command: "D:/path/to/WinMerge/WinMergeU.exe" -e "$LOCAL" "$REMOTE" -dl "Local" -dr "Remote"
-dl and -dr set the descriptions for the left and right pane.

Fulford answered 3/1, 2012 at 15:50 Comment(1)
This is the right answer...the problem for me was that GitExtensions default settings for WinMerge didn' include " -dl "Local" -dr "Remote"". Thanks!Hepburn
U
3

Add or change the following in the config file:

[merge]
    tool = winmerge
[mergetool "winmerge"]
    cmd = $PROGRAMFILES/WinMerge/WinMergeU.exe "$PWD/$MERGED"

This solution is distinct in two ways:

  1. Simply calls WinMergeU.exe *conflictfile*, while the two-sided calls suffer from the fact that left hand window presents <<<<<<<, =======, and >>>>>>> markers that $MERGED contains.
  2. Apply mergetool on per-repo basis - I am editing the $GIT_DIR/config file . Same result could be achieved by calling git config without --system or --global argument. This is to note that there are a few scopes of configuration to choose from.

The $PROGRAMFILES variable is maintained by git bash and (unlike the similar variable on native windows cmd) it navigates to "Program Files (x86)".

Underskirt answered 14/2, 2013 at 22:56 Comment(1)
I don't think $PWD is required here. This answer works fine for me without it.Exclosure

© 2022 - 2024 — McMap. All rights reserved.