変更をマージする

並行開発

誰かがプロジェクトの独自ブランチを持ったら、 並行して変更を行い、オリジナルのブランチを続ける開発にコミットできます。 まもなくですが、開発の独立したラインを結合することが必要にあります。 このプロセスは マージ (merging) として知られます。

mergeコマンド

別のブランチから変更を受け入れるためには、 merge コマンドを使います。 構文は次のとおりです:

bzr merge [URL]

URLが渡されない場合、オリジナルのものから由来する初期のブランチがデフォルトとして使われます。 たとえば、BillがMaryの作業内容からブランチを作る場合、 下記のようにコマンドを入力すれば彼女の次の変更をマージできます:

bzr merge

一方で、MaryはBillのブランチで行われた作業内容を彼女のブランチにマージしたいかもしれません。 この場合、彼女は最初に明示的にURLを渡す必要があります:

bzr merge bzr+ssh://mary@bill-laptop/cool-repo/cool-trunk

マージブランチがまだ設定されていなければ、これによってデフォルトのマージブランチが設定されます。 設定した後でデフォルトを変更するためには、 --remember オプションを使います。

マージの動作方法は?

マージのためのいくつかのアルゴリズムがあります。 Bazaarのデフォルトのアルゴリズムは次のように動作する 3方向マージ (3-way merging) の一種です。 Aが祖先でBとCの2つがブランチであると仮定すると、次のテーブルは使われるルールを提示します。

A B C 結果 コメント
x x x x unchanged
x x y y line from C
x y x y line from B
x y z ? conflict

マージの中には人間の手助けによってのみ完了するものがあることに留意してください。 これらを解決する方法の詳細は 衝突を解消する を参照してください。

マージを記録する

衝突が解決した後で、マージをコミットする必要があります。例です:

bzr commit -m "Merged Mary's changes"

衝突が無くても、明確なコミットがまだ必要です。 他のツールとは異なり、これはBazaarの機能と考えられています。 クリーンなマージは必ずしもよいマージとは限らないので、個別の明確なステップとしてコミットすることで、すべてがよい状態にあることを検証するための最初のテストスィートを実行できます。

問題が見つかったら、マージをコミットする前にそれらを訂正するもしくは revert を使用してマージを廃棄すべきです。

マージの追跡

Bazaarの機能の中で最も重要な機能の1つは、分散型で高品質のマージトラッキング です。 言い換えると、Bazaarは何がすでにマージされていることを覚えており、マージのための最良の祖先を賢く選ぶためにその情報を使い、衝突の回数と規模を最小にします。

あなたが他の多くのVCSツールの難民であるなら、 何が何でもマージは避けさせてください という習慣から抜け出すのは本当に難しいかもしれません。 Bazaarによっていつでも安全に他の人とのマージを行うことができます。 peer-to-peerの方法でうまくゆくときに、高い品質を保つために、 “統合のたまり場”として集中型のブランチを使うことも避けられます。 コラボレーションしている変更を本当に広く共有する準備ができたら、変更を中心のブランチにマージしてコミットする機会です。

このようにマージ機能がうまくゆけば開発者の共同作業の方法を変えることができます。