今回は、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 件のコメント:
コメントを投稿