Search code examples
gitmsysgitgit-diffmelddifftool

Git Diff and Meld on Windows


Has anyone ever made Meld work with Git on Windows? I am trying to make it work and I have no success.

I have Meld installed and when I call it from the command line with two files as parameters it diffs them well so Meld is installed correctly. However I can't make it work with Git (Git Diff). I use version git version 1.8.1.msysgit.1 of Git.

I have tried several things: I created a shell script, meld.sh:

#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5

and used it from Git:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"D:\\meld.sh\"

I tried to add it as a difftool like this:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"C:\\Program Files (x86)\\Meld\\meld\\meld.exe\" 

or like this:

[diff]
    tool = meld

[difftool "meld"]
    cmd = '\"/c/Program Files (x86)/Meld/meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'

But it really does not seem to work. I also tried to echo the second($2) and fifth($5) parameter from my shell script and no output. I also tried using a batch script in several ways:

meld.exe %2 %5

or

meld.exe %~2 %~5

But it really does not work... How can I pass the two versions of the file Git uses when diffing to Meld? It's pretty annoying...


Solution

  • Usually, you can find an example on Windows similar to this gist, with meld.exe being in your PATH):

    git config --global merge.tool meld
    git config --global mergetool.meld.cmd 'meld.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
    
    git config --global diff.tool meld
    git config --global difftool.meld.cmd 'meld.exe \"$LOCAL\" \"$REMOTE\"'
    

    You can find more robust settings in "Git mergetool with Meld on Windows", but the idea remains the same.


    The OP reports in the comments:

    For the difftool, your commands write the following configurations in .gitconfig:

    [diff]
      tool = meld
    [difftool "meld"]
      cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\"
    

    I changed them to:

    [diff]
      tool = meld
    [difftool "meld"]
      cmd = meld.exe $LOCAL $REMOTE
    

    and everything worked fine.