The Hackerlab at regexps.com

変更点の慎重な選択 (cherrypicking)

up: arch Meets hello-world
next: マルチツリープロジェクトとコンフィギュレーション管理
prev: シンボリックタグ

これまでに習ったことは, 一つのプロジェクトにおいて, 主要な開発ブランチとは別に変更を維持するための基本ブランチについてと, 非同期的な作業を協調させるための開発ブランチについてでした (基本ブランチ -- 私的な変更の保守 および開発ブランチ -- star-merge を使った共同作業を参照).

本章では、プロジェクトが複数に"フォーク"しているときに有用な第三の種類のブランチについて簡単に説明します. つまり, 複数の同等な主要なブランチについてです.

いささか空想的ですが, アリスとボブの mainline がかなり成長したとしましょう:


        mainline
        --------
        base-0
        patch-1
        ....
        patch-23
        patch-24
        patch-25
        ...
        patch-42



ある時点で、たぶん mainline での選択肢についての論争が起きたため, 新しい開発者の Derick が, フォークを宣言し, 彼自身のブランチを始めます:


        mainline                derick
        --------                ------
        base-0          ------> base-0
        patch-1        '
        ....          '
        patch-23 ----'
        patch-24
        patch-25
        ...
        patch-42



Derick が, mainline に歩調を合わせるのに, updatereplay を使えるのはわかってます. しかし, 彼がそうしたくなかったらどうでしょう? もし Derick が patch-25patch-42 の変更が 必要だけど, それ以外の, patch-23 以降の mainline の変更全てが不要ならどうでしょう?

Derick は mainline からの特定の変更を適用することが できます. このためには, バージョンだけを指定する代わりに, 必要なリビジョンを厳密に指定します:


        % cd ~/wd

        % tla get hello-world--derick--0.1 derick

        % cd derick

        % tla replay -A lord@emf.net--2003-example \
                 hello-world--mainline--0.1--patch-23

        % tla replay -A lord@emf.net--2003-example \
                 hello-world--mainline--0.1--patch-42

        % tla whats-missing -A lord@emf.net--2003-example \
                 hello-world--mainline--0.1
        patch-24
        patch-25
        ...
        patch-41


        % tla logs -A lord@emf.net--2003-example \
                 hello-world--mainline--0.1
        base-0
        patch-1
        ...
        patch-22
        patch-23
        patch-42



このやりかたでの 選別的な (Cherrypicking) 変更は必ずしも容易ではなく、実際的でもありません。 例えば, mainline の変更が"クリーンなチェンジセット"であることに依存します (commit をうまく使う -- クリーンチェンジセットの考えを参照)

しかしながら、いくつかのプロジェクト, 特に多くの"フォーク"が特徴的なものでは, この方法は役に立ちます.

学習上の注意: 複数のリビジョンは、コマンドラインに同時に全てを与えれば, 一つのコマンドで replay できます. replay コマンドは, 用心深い選別による変更を一度にするのに役に立つ, --list オプションも持ちます. もし特定のリビジョンをしばしば reply するのに気がついたら, tla replay --help--list オプションを 調べてみるべきでしょう.

arch Meets hello-world: A Tutorial Introduction to The arch Revision Control System
The Hackerlab at regexps.com