ノード: The Dovetail Approach -- Merging In And Out Of The Trunk, 次: The Flying Fish Approach -- A Simpler Way To Do It, 前: Merging Repeatedly Into The Trunk, 上: Going Out On A Limb (How To Work With Branches And Survive)
ブランチからトランクへ何度もマージするというのは、トランク上に居る人々 にとっては良いことです。なぜなら、自分たちの変更も、ブランチからの変 更も全てわかるからです。しかしながら、ブランチ上の開発者はトランク上 での作業分を組み込めないのです。
これをするためには、ブランチ開発者は時々余分なステップを踏む必要があ ります。(最新のトランクの変更をマージしたいと思ったり、避けられない コンフリクトをどうにかしたいと思った時はいつでも、という意味です):
paste$ cvs update -j HEAD
特別に予約されたタグ HEAD は、トランクの先端を意味しています。こ
のコマンドは、現在のブランチの根(Exotic_Greetings-branch)から、ト
ランク上の現在の最大のリビジョンまでの変更をすべてマージします。もちろん、
qsmithはこれを実行したあと再度タグをつけなければなりません。トランク上の
開発者が qsmith の変更をマージしようとしたときに、誤って自分自身の変更を
マージしてしまうことを避けられるようにするためです。
ブランチ開発者も同様に、最後にマージしてから現在状態までのトランクの変更 を正確にブランチにマージするために、トランクのマージタグを境界として使用 することができます(トランクがマージするのと同じ方法で)。例えば、jrandom がブランチからマージした後 hello.c に変更を施したとします:
floss$ emacs hello.c
...
floss$ cvs ci -m "clarify algorithm" hello.c
Checking in hello.c;
/usr/local/newrepos/myproj/hello.c,v <-- hello.c
new revision: 1.22; previous revision: 1.21
done
floss$
その後、qsmith がこれらの変更をブランチにマージし、コミットし、タグをつ けます:
paste$ cvs -q update -j merged-Exotic_Greetings-1 -j HEAD
RCS file: /usr/local/newrepos/myproj/hello.c,v
retrieving revision 1.21
retrieving revision 1.22
Merging differences between 1.21 and 1.22 into hello.c
paste$ cvs -q update
M hello.c
paste$ cvs -q ci -m "merged trunk, from merged-Exotic_Greetings-1 to HEAD"
Checking in hello.c;
/usr/local/newrepos/myproj/hello.c,v <-- hello.c
new revision: 1.21.2.1; previous revision: 1.21
done
paste$ cvs -q tag merged-merged-Exotic_Greetings-1
T README.txt
T foo.gif
T hello.c
T a-subdir/whatever.c
T a-subdir/subsubdir/fish.c
T b-subdir/random.c
paste$
jrandom は hello.c の変更をコミットした後にタグづけせず、qsmith がそれを したということに注意してください。ここでの原則では、ちょっとした変更のあ とにいちいちタグをつける必要はなくて、マージの後、及び自分の開発ラインの マージできる状態をコミットした後に常にタグをつけるべきなのです。こうすれ ば、他の人(別のブランチにいるのでしょう)に自分自身のマージの基礎となる参 照の点がわかります。