git difftool
の際に外部diffツールを使用する方法はググればたくさん見つかりますが、どうにもうまくいかなかったのでその解決方法をまとめます。
ちなみにうまくいかなかった原因はwindows向けのGitbashではなくcygwin環境下にあるbashを使用しているので、パスがうまく解決できなかったからだと思います。
.gitconfigの設定
ググって色々見つかる情報と何が違うかというと、cygpath
コマンドを経由していること。
.gitconfig
[diff]
tool = WinMergeU
guitool = WinMergeU
[difftool "WinMerge"]
cmd = 'D:/WinMerge/WinMergeU.exe' -f '*.*' -e -u -dl 'WorkTree' -dr 'Repository' -wr \"`cygpath -w $REMOTE`\" \"`cygpath -w $LOCAL`\"
[alias]
windiff = difftool -y -d -t WinMerge
オプションなどについて解説
-
[diff]
と[difftool]
おそらく[difftool]
は[diff]
セクション内に記載したtool
の具体的な設定として機能する。今回の例だとWinMerge
というaliasを設定しているのだと思われる。 - WinMerge起動時のオプション
f
:フィルタ。全ファイルを対象
e
:escで閉じるを有効
r
:再帰
u
:「最近使用した・・・」の履歴にパス情報を追加しない
dl
:左側タイトルバー。作業ツリーとわかる様な名称を自由に設定する
dr
:右側タイトルバー。リポジトリに登録されているソースとわかるような名称を自由に設定する
wr
:右側を読み取り専用。左側を作業ツリーとするので右側を編集することはありえない
※Alt+←
等の操作で修正対象を間違えることのないようにこの設定を入れています。
$LOCAL,$REMOTE
:リポジトリに登録されているソースとインデックス領域にあるソースを示す定数??
※git difftool --help | grep '\$'
を見たがいまいちピンとこない。。。 - aliasについて
y
:起動しますか?にyesで答える
d
:ディレクトリ単位で
t
:外部ツール使用