いままで、ひとつのプロジェクト上で、主な開発ブランチから分離された 基本ブランチ上の変更を管理することと、開発ブランチ上でそれとは非同期的な 作業をする方法について学んできました。 (第20章 と 第23章参照)。
この章では、プロジェクトが複数の「分岐」から構成される場合に 有効な第三のブランチについて簡単に説明します — 複数の、等価な 主ブランチについて、です。
少し抽象的ですが、アリスとボブのメインラインが非常に大きなものになったと します:
mainline -------- base-0 patch-1 .... patch-23 patch-24 patch-25 ... patch-42
ある時点で、多分mainlineの選択についての議論がおこり、 新しい開発者デリックが、彼自身のブランチを定義し、その上で開発を始めたとします:
mainline derick -------- ------ base-0 ------> base-0 patch-1 ' .... ' patch-23 ----' patch-24 patch-25 ... patch-42
私たちはすでに、デリックはupdate や replay コマンドを 使って、彼の現在の状態にメインラインの内容をマージできることを知っていますが、彼が望んでいない ものについてはどうなのでしょう? デリックはpatch-25 とpatch-42 の変更はほしいのですが、patch-23 以降にmainline上で なされたそれ以外の変更については欲しくないとしたら?
デリックは、replayに––exact オプションを使う ことによって、mainline の特定の変更を適用することができます:
% cd ~/wd % larch get hello-world--derick--0.1 derick % cd derick % larch replay --exact -A lord@emf.net--2003-example \ hello-world--mainline--0.1--patch-23 % larch replay --exact -A lord@emf.net--2003-example \ hello-world--mainline--0.1--patch-42 % larch whats-missing -A lord@emf.net--2003-example \ hello-world--mainline--0.1 patch-24 patch-25 ... patch-41 % larch log-ls -A lord@emf.net--2003-example \ hello-world--mainline--0.1 base-0 patch-1 ... patch-22 patch-23 patch-42
このような "つまみ食い" 的な変更は、簡単であったり、現実的であったりする必要は ありません。それは、たとえば、mainline での変更が、 「きれいなチェンジセット」であるかどうかに依存します。 (commit をうまく使うこと — きれいなチェンジセットの概念項参照).
にもかかわらず、プロジェクトによっては、特に、たくさんの「分岐」が できるような特徴を持ったものについては、このテクニックは役にたつことが あります。
理解するうえでの注意: replay コマンドはまた ––list オプションをとる こともでき、それは一度にたくさんのチェンジセットをつまみ食いするときに役立ちます。 もし、replay ––exact をよく利用するのなら、larch replay ––help に表示される––list オプションにも目を通してください。