WindowsのGit(msysgit)環境で、秀丸エディタ、Winmergeを使う設定

普段、Windows環境で使っているエディタは秀丸で、差分ツールはWinmergeだ。
Windowsなら、よくある環境だろう。
エディタに秀丸、外部差分ツールと外部マージツールにWinmergeの設定をする。


Gitのdiff・mergeをgitconfigだけでWinMergeにする
このサイトを見る限り、Gitの外部差分ツールと外部マージツールの指定には、シェルスクリプトを指定する必要はないようだ。
このサイトを真似て、WinMergeの設定をしてみた。

設定

%userprofile%\.gitconfig に以下を設定

[core]
    editor = 'C:/Program Files (x86)/Hidemaru/Hidemaru.exe' //fu8

[merge]
    tool = WinMerge
[mergetool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
[diff]
    tool = WinMerge
    guitool = WinMerge
[difftool "WinMerge"]
    path = C:/Program Files/WinMerge/WinMergeU.exe
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -ub -dl \"Theirs Files\" -dr \"Mine  Files\" \"$REMOTE\" \"$LOCAL\"

参照先のサイトの設定のままだと、MergeToolが正しく動作しなかったので修正した。(上記の設定は修正してある。)
訂正
diff側に余計な \が混じってたので削除


動かなかった現象と修正内容。

MergeToolが動かない

現象

mergeはまだ試してないんだけど、インストーラが書いたやつだからたぶん動く

正しく動かんよ・・・


オプションの区切り文字の確認

diffとmergeでオプションの指定が異なる。 / なのか -なのか?
パラメータは、スラッシュ( / ) か、ダッシュ ( - ) 文字が 前に付加されます。パス名にはプリフィックス文字を付加しません。
→どちらでもいいようだ。

-mってなんだ?
  WinMerge[U] [/r] [/e] [/f filter] [/x] [/xq] [/s] [/ul] [/ur] [/um] [/u] [/wl] [/wr] [/wm] [/minimize] [/maximize] [/dl leftdesc] [/dr rightdesc] leftpath [middlepath] rightpath [/o outputpath]

→そんなオプションない

-rってなんだ?
  /r すべてのサブフォルダ内のすべてのファイルを比較します(再帰比較)。 
  ユニークフォルダ (片方のみ存在するフォルダ)は、分離された項目として
  比較結果内にリストされます。 サブフォルダまで含めるとかなり比較時間が
  増大してしまうことに注意してください。 このパラメータを指定しなかった場合、
  WinMergeは比較するフォルダ内のファイルとトップレベルのサブフォルダのみ
  リストします。 サブフォルダの中までは比較しません。

→期待してる動きと違う気がする

修正して試すその1

設定
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -dl \"local\" -dm \"base\" -dr \"remote\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
起動

マージ先(ローカルリポジトリ、もしくは、ブランチ)、分岐元、マージ元(リモートリポジトリ、もしくは、ブランチ)で
表示される。

  • Mergeツールが起動するとファイルが4つできる
$ ls -1
memo.txt
memo.txt.BACKUP.15692.txt
memo.txt.BASE.15692.txt
memo.txt.LOCAL.15692.txt
memo.txt.REMOTE.15692.txt
保存
  • memo.txt
1
2
<<<<<<< HEAD
さーん
4
5
ろーく
=======
Fizz
4
Buzz
6
>>>>>>> dev
7
8
きゅーう
10

マージした内容は、memo.txt.LOCAL.15692.txtに保存されて、memo.txtには反映されない。



修正して試す その2

設定
    cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
起動
$ git mergetool -t WinMerge
Merging:
memo.txt

Normal merge conflict for 'memo.txt':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (WinMerge):


サイドバイサイドに表示された。

保存
1
2
さーん
4
5
ろーく
7
8
きゅーう
10

memo.txtに直接反映される。
こっちの方がよさそうだ。

環境

関連

msysgitのGit Bashでも使える便利な5つのBashの補完機能


ここ間違ってるよ
こうした方がよくないか?
などなど
方法は、コメント、トラックバックはてブTwitter @orange_clover宛 で、お願いします。