gitのマージツールにWinMergeを使う

前置き

gitにはconflictを起こしたときにマージを支援するための仕組みがあります。
それが

git mergetool

です。

LinuxだとMeldとかがあるようですが、Windowsだとgit用にというのが見つけられなかったので一般的なWinMergeを使うことにしました。
ちなみにgitはCygwinのgitでやってます。
のでmsysgitの方はよくわからないです・・・
#一緒?

ちなみに自分はマージツールだけ変更したかったのでマージツールだけWinMergeに切り替えてますが、diffツールとしてWinMergeを使うことも出来るようです。
また、私はWinMergeを使いましたがDiffMergeというツールも使えるようです。

概要

長々と説明なんか要らないという人のために。

http://rubenlaguna.com/wp/2010/08/05/visual-difftool-cygwin-git/

ここのを使わせてもらいます。
のでここの通りにやればできます。
ただし.cmdの部分に指定する値が少し間違ってるので注意!

\"\$LOCAL\" \"\$REMOTE\"" \"\$BASE\"" \"\$MERGED\"

\"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\"

に変更してください。
(二箇所ダブルクオートを消す。ダブルクオートの対応が間違っているため)

説明

上記URL先のを使用させてもらうので上記URL先を読みましょう。

リンク先にあるリンクからgithubに飛んで以下の必要なものを落としパスが通ってるところに置く
  • githelperfunctions.sh ← 必須
  • winmerge-merge.sh   ← WinMergeでマージを行う
  • winmerge-diff.sh    ← WinMergeでdiffを行う
  • diffmerge-merge.sh   ← DiffMergeでマージを行う
  • diffmerge-diff.sh   ← DiffMergeでdiffを行う
githelperfunctions.shの最終行辺りを編集
  1. 必要な行をコメントイン
  2. 不必要な行をコメントアウト(しなくても問題ないとは思いますが)
  3. WinMerge/DiffMergeへのパスをインストールした場所に設定
以下のコマンドを実行し、gitにツール登録を行う
# diffツールとして使う場合
## DiffMergeを使う場合
git config --global difftool.diffmerge.cmd "diffmerge-diff.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
## WinMergeを使う場合
git config --global difftool.winmerge.cmd "winmerge-diff.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
## プロンプトの設定(WinMerge/DiffMerge共通)
git config --global difftool.prompt false

# マージツールとして使う場合
## DiffMergeを使う場合
git config --global mergetool.diffmerge.cmd "diffmerge-merge.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
git config --global mergetool.diffmerge.trustExitCode false
## WinMergeを使う場合
git config --global mergetool.winmerge.cmd "winmerge-merge.sh \"\$LOCAL\" \"\$REMOTE\" \"\$BASE\" \"\$MERGED\""
git config --global mergetool.winmerge.trustExitCode false
最後にmergetool/difftoolに先ほど登録したものを設定する(各リポジトリごとの設定)
# diffツールとしてDiffMergeを使う
git difftool -t diffmerge
# diffツールとしてWinMergeを使う
git difftool -t winmerge
# マージツールとしてDiffMergeを使う
git mergetool -t diffmerge
# マージツールとしてWinMergeを使う
git mergetool -t winmerge

デフォルトとして設定するならglobalに設定する

# diffツールとしてDiffMergeを使う
git config --global diff.tool diffmerge
# diffツールとしてWinMergeを使う
git config --global diff.tool winmerge
# マージツールとしてDiffMergeを使う
git config --global merge.tool diffmerge
# マージツールとしてWinMergeを使う
git config --global merge.tool winmerge


以上でWinMergeがmergetoolとして(他の設定すればそのように)なります。