Re: Gitのdiff・mergeをgitconfigだけでWinMergeにする

Gitのdiff・mergeをgitconfigだけでWinMergeにする – nrm://lab.kss.inc – Petittech

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

WinMerge 2.13で確認したところ、動きませんでした><

 

WinMergeのコマンドラインオプションを確認

WinMergeのコマンドラインオプションを、ヘルプで確認してみましょう。

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]

ごちゃごちゃして分かりにくいので、要所のみ抜き出すと次のようになります。

WinMerge[U] leftpath [middlepath] rightpath [/o outputpath]

*pathのそれぞれを次のようにすればよさそうです。

  • leftpath : $LOCAL(現在のブランチのファイル)
  • middlepath : $BASE(現在のブランチの一つ前のコミットファイル、HEAD^)
  • rightpath : $REMOTE(マージするブランチのファイル)
  • outputpath : $MERGED(マージ結果を保存するファイル)

 

WinMergeをgit mergetoolで使うgitconfig

上記を踏まえると、WinMergeをgit mergetoolで使うためのgitconfigは次のようになります。なお$LOCAL、$REMOTEのファイルは変更する必要はないので、読み取り専用にしています。

ポイントは次の通り。

  • Unicode版のWinMergeU.exeを使う。
  • git.mergetool.pathは不要。
  • コマンドラインオプションの”/”は2重にする。(msysGitの制限?)
    • /r : 再帰的にマージツールが動くらしいが未確認。フォルダーマージで必要なのかな?
    • /e : ESCキーでWinMergeが閉じるようにする。
    • /u : マージ用の一時ファイルがWinMergeの「最近使用したファイル」に追加されないようにします。
    • /wl : 左($LOCAL)側を読み取り専用にする。
    • /wr : 右($REMOTE)側を読み取り専用にする。

これで、git mergeやgit rebaseでconflict発生時に、git mergetool -yとするだけで、WinMergeがマージツールとして起動して、GUIによるマージ作業が行えるようになります。

 

[マージ前]

コマンドラインオプションで指定した通り、マージ先、一つ前のコミット、マージ元のファイルが3ペイン表示されます。

マージ前

 

[マージ後]

「左へコピー」などのGUI操作でマージして保存すると、$MERGEDに指定したファイル、つまりマージ対象ファイルとして保存されます。

マージ後

 

これで皆さんも快適なマージライフを!

 

って、既に「WindowsのGit(msysgit)環境で、秀丸エディタ、Winmergeを使う設定 – みちしるべ」でも動かないって言及されてますね・・・

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中