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