p4mergeでgit mergeの衝突を解決する

p4mergeでgit mergeの衝突を解決する

Table of Contents

gitを使っていると必ず出くわすことになるコンフリクト。 機械的なマージでは解決できない場合にユーザー自身の手で解決を丸投げする面倒くさいあれです。 衝突してるファイルをエディタで見ると、いつ見ても見慣れないセパレータで表現されておりますます嫌になります。 今回はGUIでグラフィカルに衝突解決を行うツールp4mergeについて紹介します。

GUIでマージするならp4merge

p4mergeをGitの衝突解決ツールとして設定すると、衝突時にp4mergeでグラフィカルにマージを行うことができます。

p4merge のいいところ

  • 衝突位置にだけ移動するショートカットが用意されている
  • 衝突ソース毎に背景色が違うので見分けがつく

インストール方法

公式サイトからOSを選んでダウンロードします。

p4mergeが起動するように設定

.gitconfig を次のように設定します。他の無関係な設定は省いています。

[merge]
  tool = p4merge
  keepBackup = false;

[mergetool "p4merge"]
  path = /Applications/p4merge.app/Contents/MacOS/p4merge
  cmd = p4merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
  keepTemporaries = false
  trustExitCode = false
  keepBackup = false

このように設定すると、 $ git mergetool と実行すれば、 p4merge が起動します。

もし、マージではなく比較でも p4merge を使いたい場合は次のように設定します。

[diff]
  tool = vimdiff

[difftool]
	prompt = false

[difftool "p4merge"]
	cmd = /Applications/p4merge.app/Contents/MacOS/p4merge \"$LOCAL\" \"$REMOTE\"
	trustExitCode = false

この設定では、

  • $ git diff を実行すればユニファイド型式で表示され、
  • $ git difftoolを実行すれば vimdiff で表示され、
  • $ git difftool -t p4mergeを実行すれば p4merge で表示されます。

p4mergeの設定

p4merge自身の設定についてです。デフォルトでも使うことは可能ですが、いくつか設定をしておくことで余計な穴にハマらず使えるかと思います。

  • フォントは日本語対応フォントにする
  • 文字が重なる場合はフォントを等倍にする
  • encode は utf-8(厳密にはファイルと合わせる)
  • 改行タイプはシステムと合わせる(厳密にはgit commit時に自動変換オプションもあるのでそっちの兼ね合いも必要)
  • Comparison method は 改行差異とスペース幅を無視する(ここは好みの問題でもある)
このエントリーをはてなブックマークに追加