前節の例を続けると、 現在のリビジョン・ツリーは次の様になっています:
+-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 ! +---------+ +---------+
前節で枝 `R1fix' を幹にマージした事を、ここでは星線で表します。
次に、枝 `R1fix' で開発が続けられたと仮定します:
+-----+ +-----+ +-----+ +-----+ +-----+ ! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk +-----+ +-----+ +-----+ +-----+ +-----+ ! * ! * ! +---------+ +---------+ +---------+ Branch R1fix -> +---! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 ! +---------+ +---------+ +---------+
この新しい変更を幹にマージする場合を考えます。 ここで再び `cvs update -j R1fix m.c' コマンドを用いた場合、 CVS は既にマージされた変更点を重ねてマージしようとして、 望ましくない結果をもたらします。
そこで、 未だ幹にマージされてない変更点だけマージしたい旨を、 明示する必要があります。 これには、`-j' オプションで二つのリビジョンを指定します。 CVS は、 最初のリビジョンから次のリビジョン迄の変更をマージします。
cvs update -j 1.2.2.2 -j R1fix m.c # 1.2.2.2 から、枝 R1fix の # 先頭までの変更をマージする
この方法の問題点は、リビジョン 1.2.2.2 を自分で指定する必要がある事です。 最後にマージが行われた日時を使用する方が、少しましでしょう:
cvs update -j R1fix:yesterday -j R1fix m.c
さらに良いのは、 変更点を幹にマージする度に、 枝 `R1fix' にタグを振っておき、 後でマージする時にそのタグを用いる方法です:
cvs update -j merged_from_R1fix_to_trunk -j R1fix m.c