前節の例を続けると、 現在のリビジョン・ツリーは次の様になっています:
+-----+ +-----+ +-----+ +-----+ +-----+ ! 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