衝突の解消

ワークフロー

マージプロセスの間にそれぞれの衝突を解消することを強制する他のいくつかのツールとは異なり、Bazaarはできる限りマージしてから衝突を報告します。 これによって衝突の解消をより扱いやすくします。 解消すべき方法を決めることを手助けするためにポストマージツリー全体の内容が利用可能だからです。 それぞれの解消もしくはグループがよい状態であることを確認するためにテストをいくつか選んで実行することもよいでしょう。

衝突の一覧を表示する

merge コマンドで報告されるのと同様に、突出した衝突の一覧は conflicts コマンドを使用することでいつでも表示されます。 これは status コマンドから出力の一部として含めることも可能です。

衝突を解消する

衝突に遭遇したら、 merge コマンドは解決されていない領域を表示する埋め込みマーカーをそれぞれのファイルに追加します。 1つの衝突を持つそれぞれのファイルに対して3つのファイルも作ります:

  • foo.BASE
  • foo.THIS
  • foo.OTHER

foo は衝突したファイルの名前です。 多くの場合、問題になっているそれぞれのファイルを手作業で編集し、関連領域を修正し衝突マーカーを除去することで衝突を解消できます。

衝突の中のすべてのファイルを修正し、マーカーを削除した後で、 resolve コマンドを使用してBazaarにそれらを解決したものとしてマークするように頼みます:

bzr resolve

代わりに、それぞれのファイルを修正した後で、これを解消したものとしてマークできます:

bzr resolve foo

resolve コマンドは作業ツリーからBASE, THIS, OTHERファイルをクリーンナップします。

remergeコマンドを使う

いくつかの場合、任意のファイルに対して異なるマージアルゴリズムを試したいことがあります。 これを行うためには、ファイルを次のように指定して remerge コマンドを使います:

bzr remerge --weave foo

foo はファイルで weave オプションは利用可能なマージアルゴリズムです。 いわゆる criss-cross (十字遺伝)マージが検出されたときに、 たとえば、2つのブランチが同じものをマージしてからお互いをマージするときに、このアルゴリズムはとりわけ便利です。 詳細については criss-crossremerge のオンラインヘルプを参照してください。

衝突を解消するために外部ツールを利用する

衝突を解消するためにGUIツールを利用したいのであれば、 extmerge プラグインをインストールしてください。次のようにインストールできます:

bzr extmerge foo

foo は衝突したファイルです。 解消するファイルの一覧を提供するよりも、すべての衝突ファイルを暗黙の内に指定するために --all オプションを利用できます。

extmerge コマンドは bazaar.conf ファイルの中の external_merge 設定によって指定されるツールを使います。 設定されていなければ、 kdiff3 もしくは opendiff のような人気のあるマージツールが設定されます。 後者はOS XのFileMergeのコマンドラインインターフェイスです。