The Hackerlab at regexps.com

チェンジセットの探究

up: arch Meets hello-world
next: replay の紹介 -- update の代用
prev: チェンジセット (changeset) の紹介

前章では チェンジセット (changesets), および, mkpatchdopatchコマンド (伝統的な diffpatch プログラムの主題についての変わり種)を紹介しました.

本章ではより詳細な説明をします: チェンジセットがどのようにアーカイブで使われているか, また, commitupdate コマンドによって どのように利用されてるかについてです. このことから, arch を最大限活用する方法がわかります.

どのように動作するか -- commit はチェンジセットをアーカイブに格納する

プロジェクトの最新のリビジョンを get し, 変更を加え, ログメッセージを書き, これらの変更点をアーカイブに commitしたとしましょう. 何が起きているでしょうか?

本質的に, commit は:

1 最新のリビジョンと比較して、 あなたが加えた変更を記述するチェンジセットを求める.

2 新しいリビジョンのためにアーカイブの中にディレクトリを作成する。

3 アーカイブの中にログメッセージとチェンジセットを格納する。

この観点で, 以前の章を見直したい人もいるかもしれません: それはどのように動作するか -- 新しいリビジョンの commit.

get-changeset はアーカイブからチェンジセットを取得する

以前に, cat-archive-log コマンドはアーカイブからログメッセージを取り出すことを学びました (なぜアリスがコミットできないかについて検討するを参照).

アーカイブから, チェンジセットも取り出せます:


        % cd ~/wd

        % tla get-changeset hello-world--mainline--0.1--patch-1 patch-1
        [...]


get-changeset はチェンジセットをアーカイブから取得し, この場合は, それを patch-1 と呼ばれるディレクトリに格納します.

(チェンジセットのフォーマットが記述されているのは arch のチェンジセットフォーマットです.)

show-changeset を使ってチェンジセットを調べる

チェンジセットのフォーマットはプログラムで使うために最適化したもので, 人のためのものではありません. "手で"チェンジセットを見るのは厄介です. 代わりに, 以下のようにして, diff フォーマットでのパッチの記録を取りたいと思うことでしょう:

        % tla show-changeset --diffs patch-1

        [...]

もし例題を追ってきてたら, 以前に導入した changes コマンド (しまった -- 何したんだっけ?を参照) から, show-changeset の出力形式を理解することでしょう

commit をうまく使う -- クリーンチェンジセットの考え

一組の変更をコミットするとき、一般的に"最良の習慣"なのは 意識して クリーンチェンジセット を作ることです.

クリーンチェンジセットは、全てが関連しあう, 一つの目的のためだけの、 変更のみを含むものです. 例えば、いくつか直さなければならないバグがあったり、追加する機能があれば、 それらの変更を混同して一つの commit にしないことです.

クリーンチェンジセットには多くの利点がありますが, なかでも重要なことは以下の点です:

容易な点検 チェンジセットを理解しやすいのは, 一つのことだけを行なおうとしてるときです.

容易なマージ 後の章で学習が進むにつれて、アーカイブのチェンジセットの集合を調べて, その中から, 取りだして選びたい場合があります. "バグフィックス A" が必要で, "新機能 B" は不要かもしれません. 各チェンジセットが一つのみの目的を持つなら、 この手の 用心深い選別 (cherrypicking) は大変現実的です.

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