Next: , Previous: Creating Branches, Up: Branches


12.7.6.3 枝の併合

ある枝で変更を完了したときには、それらの変更をファイルの開発の主流(幹)に 取り込みたいことがしばしばあるでしょう。 これは簡単な操作ではありません。 というのは、幹でも開発は進行しているので、 別の向きに変更されているファイルに変更を併合する必要があるからです。 VCでは、vc-mergeコマンドで併合(とそれ以外のことも)できます。

C-x v m (vc-merge)
作業ファイルに変更を併合する。

C-x v mvc-merge)は、 一連の変更を作業ファイルの現在の版に併合します。 このコマンドはまず、ミニバッファで枝番号か2つの版番号を読み取ります。 そして、その枝での変更、あるいは、指定した2つの版のあいだの変更を調べ、 それらをファイルの現在の版に併合します。

例として、枝1.3.1である機能を実装し終えたとしましょう。 この間、幹でも開発が進んでいて版1.5になっています。 枝での変更を幹に併合するには、 まず、C-u C-x C-q <RET>と打って、幹の先頭版へ行きます。 版1.5が現在の版になります。 ファイルのロックを使っている場合には、C-x C-qと打って、 版1.5をロックして変更できるようにします。 続いてC-x v m 1.3.1 <RET>と打ちます。 すると、枝1.3.1での(枝の開始点である版1.3から枝の中にある最新版までの) 一連の変更を取り出して、それらを作業ファイルの現在の版に併合します。 ここで、変更された作業ファイルをチェックインできます。 つまり、枝での変更を取り込んだ版1.6を作れるのです。

チェックインするまえに、枝から併合したあとにさらに編集することも可能です。 しかし、併合した版をチェックインしたあとで、 ロックしてさらに編集するのが、普通は賢いやり方です。 こうすれば、変更履歴をよりよく記録に残せます。

すでに修正されているファイルに変更を併合するときには、 変更が重複する場合があります。 この状況を矛盾と呼びます。 矛盾した変更の辻褄を合わせることを矛盾の解消と呼びます。

併合中に矛盾が起こると、VCはこれらを検出し、 それらをエコー領域に表示してユーザーに伝え、 併合を補佐してほしいかどうか聞いてきます。 yesで答えると、ediffセッションを開始します (see Ediff)。

noで答えると、矛盾する変更はどちらも矛盾印で囲ってファイルに挿入します。 矛盾する部分は、下の例のようになります。 作業ファイルの名前は‘name’であり、 ユーザーBの変更を収めたマスタファイルの版は1.11です。

     <<<<<<< name
       User A's version
     =======
       User B's version
     >>>>>>> 1.11

この矛盾を解消するようにファイルを手で編集できます。 あるいは、ファイルを訪問してからM-x vc-resolve-conflictsと打ちます。 すると上に述べたediffセッションを開始します。