The Hackerlab at regexps.com

replay の紹介 -- update の代用

up: arch Meets hello-world
next: 選択的なファイルのコミット
prev: チェンジセットの探究

update は開発パスに追いつくための唯一の方法ではありません。 別の選択肢は replay です:

        % cd ~/wd/project-tree
        % tla replay
        [....]

これは実際には何を行うものでしょうか。

update での更新

hello-world の古いバージョンをチェックアウトしたとしましょう:

        % cd ~/wd
        % tla get hello-world--mainline--0.1--patch-1 hw-patch-1
        [...]

結果として得られるツリーが最新のものでは無いことは, 簡単に分かります:

        % cd hw-patch-1
        % tla missing
        patch-2
        patch-3

さて, hw-patch-1 にローカルに変更を加え, 次に update を実行してみます. 何が起こるでしょうか?

ローカルの変更は patch-1に対して算出される. 言い換えれば、ここで作られるチェンジセットが記述する変更は, patch-1 リビジョンのプリスティンコピーから, プロジェクトツリーの現在の状態 (hw-patch-1)へのものです.

patch-3 のコピーがチェックアウトされる. updatepatch-3 リビジョンのプリスティンコピーから開始します.

changeset は patch-3 ツリーに適用される. 最初の段階で算出された変更が, 新しいツリーに行なわれます.

ただし、別の方法があります:

replay コマンド

私たちは、patch-1のローカルコピーを持ってます. それはは恐らく, ローカルな変更点があります:

        % cd ~/wd/hw-patch-1
        % tla missing
        patch-2
        patch-3

patch-2 および patch-3リビジョンは, それぞれ, 特定のチエンジセットに対応し, アーカイブに格納されてることを思いだしてください (それはどのように動作するか -- 新しいリビジョンの commitを参照).

これらの変更をあなたのローカルツリーに追加するには, get-changeset を使ってそれぞれのチェンジセットを取得し, dopatch を使って適用することもできるでしょう (get-changeset はアーカイブからチェンジセットを取得する, と dopatch を参照). とはいえ, これは多量の退屈な作業です. だから, arch はもっと自動的な方法を提供して, 同様の効果をもらたします:

        % cd ~/wd/hw-patch-1
        % tla replay
        [....]
        % tla missing
        [出力無し]

replay は、ちょうど上に述べたことをします: アーカイブからパッチを取り出し、次々に適用します. ただし, 一点注意があります: これらのパッチが衝突を起こすなら, replay は停止して, あなたが衝突を解消する必要があります. その後、replay が実行停止した地点から, replay を再度実行させることができます.

どのように動作するか -- replay

このチュートリアルを最初から追いかけてれば, replay の作業の方法は大変自明なはずです. 実際, 上で述べただけのことです. replay は、missing を使ってどの変更点がツリーに無いかを見い出し, get-changeset でチェンジセットを取得し, dopatch で適用します。 これを実行するのに沢山の"帳簿付け"があります. そして, その帳簿付けこそが, replay が自動化する作業です.

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