2013年12月21日土曜日

MeldはGitプロジェクトでも使えるマージツール

Gitプロジェクトの比較およびマージ作業のやり方です。(使用OS: Ubuntu 13.10)
今回は、Meldというマージツールを使います。

すでにgitクライアントがインストールされていることを前提に話を進めますが、未だなら sudo apt-get install git-core してください。

まずはMeldをインストール
$ sudo apt-get install meld

次に適当なGitプロジェクトをGitHubから取得します。
$ git clone https://github.com/akirattii/sandbox.git
今回は私のGitHubリポジトリから"sandbox"を取得してみました。


コンフリクトの解決


コンフリクトはチーム開発の華です。慌てず焦らずマージしましょう。
ここから説明するのは、コンフリクトの発生の再現とその対処(マージ)方法です。

まずは、さきほどの sandbox をもうひとつ別名で clone します。
$ git clone https://github.com/akirattii/sandbox.git sandbox2
フォルダ名は sandbox2 としました。

次に、さきほど作っておいた sandbox に戻り、 README.md を適当に編集してGitHubへコミットしてください。
$ cd sandbox
$ vi README.md # ここで行末に"123"を追加してみます。
$ git add README.md
$ git commit -m "123"
$ git push -u origin master

さて、コンフリクトを発生させてみましょう。
sandbox2の方の README.md を編集してGitHubへコミットしてみてください。
$ cd ../sandbox2
$ vi README.md # ここで行末に"456"を追加してみます。
$ git add README.md
$ git commit -m "456"
$ git push -u origin master
  Username for 'https://github.com': akirattii
  Password for 'https://akirattii@github.com': 
  To https://github.com/akirattii/sandbox.git
  ! [rejected]        master -> master (fetch first)
  error: failed to push some refs to 'https://github.com/akirattii/sandbox.git'
いつも通りに git push しようとするとエラーが発生しました。これはローカルとリモート間にコンフリクトが発生しているからです。

それでは、いよいよコンフリクトの解決にとりかかりましょう。
$ git pull
  remote: Counting objects: 5, done.
  remote: Compressing objects: 100% (1/1), done.
  remote: Total 3 (delta 1), reused 3 (delta 1)
  Unpacking objects: 100% (3/3), done.
  From https://github.com/akirattii/sandbox
    cae4486..0e30f0c  master     -> origin/master
  Auto-merging README.md
  CONFLICT (content): Merge conflict in README.md
  Automatic merge failed; fix conflicts and then commit the result.
$ git mergetool -t meld
  Merging:
  README.md

  Normal merge conflict for 'README.md':
    {local}: modified file
    {remote}: modified file
  Hit return to start merge resolution tool (meld):  # ここでリターンキーを押すとマージツールとして meld が立ち上がります。



上の画像ようにmeld上でファイルをマージして保存し、最後にmeldを終了すればマージ作業は完了です。
$ git add README.md
$ git commit -m "merged."
$ git push -u origin master
後はいつもどおりに add & commit & push すればOK。おつかれさまでした。

0 件のコメント:

コメントを投稿