gitで、リビジョンの比較やコンフリクトの解消をmeldでやるには。
やりかた
.gitconfigに以下を追記しておくと、git difftool -dやgit mergetoolでmeldが起動するようになる。
[diff]
tool = meld
[difftool "meld"]
cmd = meld $LOCAL $REMOTE
[merge]
tool = meld
[mergetool "meld"]
cmd = meld $LOCAL $BASE $REMOTE --auto-merge
どういうこと?
[difftool "meld"]に出てくる$LOCALと$REMOTEは、それぞれ変更前と変更後を表している。1つ目のパラメータが左側に表示される。
[mergetool "meld"]の$LOCALと$REMOTEは、それぞれ手元のファイルとサーバのファイルとなる。
$BASEは、手元/サーバどちらの変更も入る前のファイルとなる。これだけだと全部手動でマージする羽目になるので、--auto-mergeを追加しおくとコンフリクト以外の部分はmeldがマージしてくれる。
また、$MERGEDというのもあり、gitが自動マージした結果のファイルとなる。こちらはコンフリクト部分以外はマージ済みの状態になる。
ならこれでいいじゃん、という気もするが、コンフリクト部分の表示がこんな風になる。
<<<<<<< HEAD
conflict2
=======
conflict1
>>>>>>> test1
meldでマージする場合、左右に$LOCAL、$REMOTEが出ている訳なので、この表示はちょっと冗長な気がする。
ちなみに、$MERGEDに--auto-mergeをつけると・・・
(??)conflict2
(??)conflict1
こんな風。
なお、[difftool "meld"]、[mergetool "meld"]の項がなくても、gitが自動でコマンドラインを決めるらしく、それなりに動く。その場合は
[difftool "meld"]
cmd = meld $LOCAL $REMOTE
[mergetool "meld"]
cmd = meld $LOCAL $BASE $REMOTE
に相当する動作になっているようだ。
参考資料
http://stackoverflow.com/questions/11133290/git-merging-using-meld
https://git-scm.com/docs/git-difftool