この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Gitでのマージ作業
Gitを使用していて競合が発生した場合、それを解決して正しい状態にする必要があります。 私は以前、競合が発生したファイルに<<<<<<<HEADとかのよくわからない文字列が入って、どうやって修正すればいいか悩んでいました。 こういった競合を解消するためのツールはいくつもありますが、今回はMacで「p4merge」というツールを使用して Gitの競合を解消する方法について紹介します。
環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Git : 1.8.2
Gitは使える状態にしておいてください。
p4mergeをセットアップ
1.p4mergeをダウンロード まずはここからp4mergeをダウンロードして、p4merge.appを/Applicationsにインストールします。
2.gitconfigの設定 ~/.gitconfigファイルを修正して、マージ用ツールとしてp4mergeのパスを設定します。
[merge]
tool = p4merge
[mergetool]
keepBackup = false
[mergetool "p4merge"]
path = p4merge
keepTemporaries = false
trustExitCode = false
3.p4mergeシェルを作成 パスの通っている場所(/usr/local/binとか)にp4mergeシェルを作成します。
#!/bin/sh
P4MERGE=/Applications/p4merge.app/Contents/MacOS/p4merge
${P4MERGE} $*
実行権限もつけておきましょう。これで設定は完了です。
% chmod 755 /usr/local/bin/p4merge
p4mergeを使って競合を解消してみる
では、p4mergeを使うために、わざと競合状態をつくります。 まずp4mディレクトリを作成し、そこでGitを初期化します。
% mkdir p4m
% cd p4m
% git init
次にp4mディレクトリでhello.jsファイルを作成し、コミットしましょう。
function greet(name) {
return "Hello," + name;
}
console.log(greet("juno"));
% git add hello.js
% git commit -m "initial commit"
次にブランチを作成し、ファイルを編集してコミットします。
//ブランチを作成
% git checkout -b myBranch
hello.jsは次のように修正しましょう。
function greet(say,name) {
return say + "," + name;
}
console.log(greet("Good Morning","juno"));
ブランチでコミットします。
% git add hello.js
% git commit -m "change greet from myBranch"
masterブランチに戻り、さっきとは違う修正をしてコミットします。
% git checkout master
次のようにhello.jsを修正します。
function greet(greeting,name) {
console.log("greeting:", greeting);
return greeting + "," + name;
}
console.log(greet("Good Afternoon","juno"));
hello.jsをコミット後にマージしようとしたら競合が発生しました。git mergetoolコマンドを使用してp4mergeを起動します。
% git add hello.js
% git commit -m "change greet"
% git merge myBranch
Auto-merging hello.js
CONFLICT (content): Merge conflict in hello.js
Automatic merge failed; fix conflicts and then commit the result.
% git mergetool
Merging:
hello.js
Normal merge conflict for 'hello.js':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (p4merge):
p4mergeで競合を解決しましょう。 使い方はシンプルで、基本的には競合している箇所を確認し、どの内容を適用するか決めます。 内容に対応した色のボタンがあるので、どの内容を残すかきめましょう。なお、直接内容を入力することもできます。
競合を解消したら、ファイルを保存してp4mergeを終了し、コミットすれば競合を解決してマージ完了です。
% git commit -m "merge from myBranch"
まとめ
今回はp4mergeをつかってGitの競合を解決してみました。 テキストでがんばって修正するよりわかりやすく、簡単に競合の解決ができますね。