ググるといろんな文献が出てくるけれど、書いてあることが古かったりバラバラだったりしたので、自分用にまとめてみました。
Windows環境でWinMergeがインストール済みである前提。
やるべきこと
コマンドラインで叩くなら、特別な設定をせずとも↓で終わりです。
-- 使い方
git difftool -d -t winmerge [commit A] [commit B] -- [path]

オプションを覚えるのが億劫ならエイリアスを設定すれば終わりです。
~/.gitconfig に↓を設定。
[alias]
diffwinmerge = difftool -d -t winmerge
-- 使い方
git diffwinmerge [commit A] [commit B] -- [path]
私はコマンドは長いほうが覚えやすい派なのだけれど、短いほうがいい人はdwとかでもいいのだと思う。
動作原理
まず、 git diff と git difftool は大変よく似ているけれど、
公式ドキュメント曰く、 git difftool は git diffのフロントエンド実装とのこと。
なので使えるコマンドは git diff に準じています。
→詳しくはgit diffのマニュアルを見ること
git difftool にはあらかじめいくつかツールの候補が設定されています。
おなじみなのは vimdiff かも。Vimのdiffモードのことですね。
そのあらかじめ設定してくれている中(→マニュアル)に、なんと winmerge がある。

おそらく昔はこれがなく、gitconfigにWinMergeの実行パスを書いたりする必要があったのでしょう。
でも現在は「git difftoolの使用ツールに「winmerge」を指定する」だけで終わりです。
先述のコマンドにつけているオプションは、それぞれ以下の通り。
-d:--dir-diffと同義。
比較対象の左側と右側をそれぞれディレクトリとみなして、ディレクトリ同士の差分として表示する。- これがないと1ファイルずつ順番にdiff画面が出てくる。うざい。
- あとドキュメント曰く、これをつけていると「外部ツールでDiffを開くがよいか?(Y/n)」の質問が出てこなくなる。
→-y(上記質問を飛ばす)のオプションは別途付ける必要はない。
-t winmerge:--tool=winmergeと同義。
difftoolとしてwinmergeを利用する。
自分で全部調べることができて、すっきりしました。

コメント