I\'m trying to use Araxis Merge as my diff / merge tool for MSYSGit.
I found a few resources on the net:
Right... I got it working, with msysgit version 1.6.3.2.1299.gee46c, under DOS or Git Bash, with an evaluation license for Araxis Merge 2009, v2009.3713:
The approach is to use the new git difftool and git mergetool, instead of plain diff.
First, let's setup some scripts for those diff and merge tool
C:\>git config --global diff.tool adifftool
C:\>git config --global diff.external git-difftool--helper
C:\>git config --global difftool.adifftool.cmd "difftool.sh \"$LOCAL\" \"$REMOTE\" \"$MERGED\""
C:\>git config --global difftool.prompt false
Notes:
git-difftool--helper
, I will use difftool even when I will type 'git diff
'. $MERGED
to your difftool script: that is the only variable with the real name of the file being diff'ed. $LOCAL
and $REMOTE
are temporary names.For the merge tool, you would set the following global values:
C:\>git config --global merge.tool amergetool
C:\>git config --global mergetool.amergetool.cmd "mergetool.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\""
C:\>git config --global mergetool.prompt false
By setting those tools to some shell scripts, you will be able to switch tools from within those scripts.
Another approach is to name your tools (mergetool.araxis.cmd
, mergetool.winmerge.cmd
, ...) and to specify the right tool in the diff.tool
or merge.tool
setting.
Create difftool.sh
and mergetool.sh
in a directory referenced by your global environment variable PATH
. They will work even from DOS (and they are sh
-- shell -- scripts)
difftool.sh
#!/bin/sh
echo Launching Araxis Merge.exe: $3
t1="'$3 (from)'"
t2="'(to)'"
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -nowait -2 -title1:${t1} -title2:${t2} "$1" "$2"
Notes:
titleN
' option.-title
option, you need to set it to a local variable, with "' '"
quotes combinations (the double quotes will disappear during the shell script execution, leaving the simple quotes, allowing spaces within a title!)$3
represent the real name and not some temporary file name for diff purpose. Hence the use of $3
within the title1
option, with space in it. git diff HEAD^ HEAD
would not work in DOS session: only git diff "HEAD^" HEAD
would.mergetool.sh
#!/bin/sh
# Passing the following parameters to mergetool:
# local base remote merge_result
alocal=$1
base=$2
remote=$3
result=$4
t1="'$4 (current branch)'"
t2="'(common ancestor)'"
t3="'(to be merged)'"
if [ -f $base ]
then
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$base" "$remote" "$result"
else
"C:/Program Files/Araxis/Araxis Merge/Compare.exe" -max -wait -merge -3 -a2 -title1:${t1} -title2:${t2} -title3:${t3} "$alocal" "$result" "$remote" "$result"
fi
I am not sure I those scripts do work properly when multiple files are involved (multiple diffs, multiple files to be merged).
Just tested it: it works, and Araxis compare.exe does open one tab per file to diff or merge.
Give it a try and let us know ;)