Gitのマージツールにp4mergeを使ってみた

Gitの本格導入の前に、マージのコンフリクト解決に使用するマージツールについて調べてみたのでメモ。

コンフリクトした際に、テキストエディタで直接修正するのは非常に面倒。そこでmergetoolを使うとマージ作業をかなり楽にできます。
ただしデフォルトのmergetoolだと使いづらい。Googleで色々調べてみるとp4mergeがオススメそうなので試してみました。

インストール方法

  • こちらよりThe Perforce Visual Client (P4V)をダウンロードします。OSに合わせてダウンロードする。
  • ダウンロードしたファイルをインストール。p4mergeのみインストールすればOKです。

gitconfigの設定

  • mergetoolにp4mergeが使用できるように~/.gitconfigを設定します。
[merge]
        tool = p4merge
[mergetool]
        keepBackup = false
[mergetool "p4merge"]
        path = p4merge
        keepTemporaries = false
        trustExitCode = false
  • Macの場合は以下の/usr/local/binなどにp4mergeシェルを作成する。Windowsの場合はp4mergeをインストールすると自動的にパスが通り不要のはず。
#!/bin/sh

P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge

${P4MERGE} $*

使い方

意図的にマージを起こして使ってみます。masterブランチとtopicブランチで同一のファイルを修正し、masterにtopicをマージしてみます。

  • git mergeをするとコンフリクトと表示される。
git merge topic
Auto-merging test
CONFLICT (content): Merge conflict in test
Automatic merge failed; fix conflicts and then commit the result.
  • ここでgit mergetoolを実行する。エンターを押すとp4mergeが起動します。なお、一々エンターを押すのが面倒な場合はgit mergetool -yとするとデフォルトのmergetoolを起動できます。
git mergetool
Merging:
test

Normal merge conflict for 'test':
  {local}: modified
  {remote}: modified
Hit return to start merge resolution tool (p4merge): 
  • p4mergeでマージ作業を行う。p4mergeだとマージ先、分岐元(共通の親)、マージ元、マージ後の状態が一度に表示され大変分かりやすいです。画面下に両方の変更を反映した状態の内容が表示されているので、どちらの変更を採用するのかポチポチと選択していきます。ここは内容を見て、マージ元を採用するか、マージ先を採用するか、または両方採用するかなど人が判断するしかないです。ちょっと残念なのが両方の変更を適用する場合は適用の順番を選べなさそう。その場合は手動で入れ替えます。

マージ完了後保存してp4mergeを終了するとコンフリクト解決状態になります。もし、コンフリクトが複数ファイルの場合は、続けてp4mergeで開き解決していきます。
f:id:Hirohiro:20111116002119j:image:w800

  • コンフリクトを解決したら、後はadd、commitして終わり。
git add test
git commit
  • なお、p4mergeで文字コードを変更したい場合は、設定画面から変更できます。その他、改行コードやスペースの違いを無視したい場合もここで設定できます。

f:id:Hirohiro:20111116004137j:image


次回はEGit(EclipseのGitプラグイン)のマージツールを試したいと思います。