Git(msysgit)から差分確認にWinmergeを使う

いつもはAraxis Mergeを使っているが諸事情(ライセンス都合)につきWinmergeでセットアップしてみた。

Araxis Mergeを設定したときの記憶によると、1.6.4以降で微妙に書き方が異なる。とはいえ以前の書き方でも動いていた気がするが。
参考: http://www.araxis.com/merge/scm_integration.html#msysGit

WinMergeのインストール

http://winmerge.org/からダウンロードしてインストール。

WinMerge 2.12.4をいれたが、サイトやヘルプをみてもgitについての設定は載っていない。軽くググるとgitからのコマンドラインに対応していないので別途スクリプトをつくって変換してあげないといけないようだ。

git用のスクリプト作成

どこでもいいが$HOME/につくることにする。Vista以降ならC:\Users\makoto_kwになる。

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

参考: http://stackoverflow.com/questions/1881594/use-winmerge-inside-of-git-to-file-diff

gitの設定

gitの設定はHOMEフォルダの.gitconfigに保存される。git configコマンドで設定もできるが"が入るとややこしいので$HOME/.gitconfigを直接編集する。

~/.gitconfig
[[diff]]
tool = winmerge
[difftool "winmerge"]
cmd ="WinMergeGitDiff.sh \"$LOCAL\" \"$REMOTE\""

この書き方(difftool/mergetool)はgit 1.6.4以上で使える方法になる

実行

git difftool -yにてwinmergeで起動できる。ファイルの度にtoolを開くか聞いてきて対話が面倒なので-yをつける。複数のツールを.gitconfigに書いておいてgit difftool -y -t winmergeというように明示的にツールを指定にするなども可能。

-y(--no-prompt)の指定が面倒であればpromptのデフォルトをオフにしてもいい。
git config --replace --global difftool.prompt false

設定でpromptをオフにした場合に、明示的に有効にするには--promptを付ける。
git difftool --prompt

参考: http://www.kernel.org/pub/software/scm/git/docs/git-difftool.html

なお、mergetoolはちゃんとためしていない。