regexps.com
もしこれまでの例題に習ってるなら, 新しいアーカイブを作成し, そのアーカイブ内で hello-world
プロジェクトを作りました。
そして, hello-world
の最初のバージョンをアーカイブへインポートしました.
リビジョン管理システムを使用したプログラム作業として最も一般的なものは、一組の変更を コミット (commit) することです。 本章では、その作業の最も基本的な方法を見ていくことになります。
hello-world
のソースを見ると、綴りの誤りと改行のバグに気づくかもしれません:
% cat hw.c #include <stdio.h> void hello_world (void) { (void)printf ("hello warld"); }
明らかに, これは hello warld
ではなく, hello world
のはずです.
それに, もし規約に従うつもりならば, メッセージの後に改行が多分必要です.
さて、これらのバグをいま直しましょう.
Free advice is worth what you pay for it. -- anonymous.
これらのバクを直す計画です:
ソースを変更してバグを直します.
そして arch
に頼んでバグを直すのに必要な変更をアーカイブに記録します.
二番目の工程で新しいリビジョンをアーカイブに作ります.
前に注意したように、新しいリビジョンを作成する場合はいつも、 そのリビジョンに対してログメッセージを提供する必要があります (最初のログファイルの作成を参照)。
私たちのオモチャの例で修正しようとするバグは大変つまらないです. 一方, 現実の世界では, それらはもっと込み入ったものでしょう. あなたには選択肢があります: 全ての修正を終えるまで待ってから, 変更点を記述するログメッセージを書くことができます. あるいは, 作業しながらログメッセージを書くこともできます.
ここで, フリーな助言です: 作業しながらログメッセージを書きなさい.
言いかえれば、ハックするにつれノートをとりなさい.
tla
コマンドで言えば, これの意味するところは,
バグを修正する工程を次のコマンドで始めなさい. ということです:
% cd ~/wd/hello-world tla make-log ++log.hello-world--mainline--0.1--lord@emf.net--2003-example
そして新しいログファイルを編集するときは、こんな感じにしてください:
Summary: Fix bugs in the "hello world" string Keywords:
このように Summary:
は来たる変更でのあなたの意図することを説明します.
作業を行うにつれ, ログメッセージの本体を埋めることができます.
これらのバグが実際よりももっと複雑なものであるとして, 作業をどのようにするかを述べます:
スペルの誤りの修正 warld
を world
へ変更します。
ログメッセージの更新 ログファイルへメモを追加します:
Summary: Fix bugs in the "hello world" string Keywords: Spell "world" correctly (not "warld").
改行の誤りを訂正 メッセージに改行を追加します.
再びログメッセージを更新 ログファイルへメモを追加します:
Summary: Fix bugs in the "hello world" string Keywords: Spell "world" correctly (not "warld"). Add a newline to the hello world message.
そして、これらの複雑なバグの修正の長く困難な作業を終えました. それを公開する前に作業をもう一度再検討することは、よい考えですよね?
ご心配なく、arch
は助けになります:
tla what-changed --diffs [....] *** patched regular files **** ./hw.c [....] @@ -4,7 +4,7 @@ void hello_world (void) { - (void)printf ("hello warld"); + (void)printf ("hello world\n"); } [....]
おー! これでよく分かります。アーカイブにその変更を記録する番です。
そこで、アーカイブにこれらの変更点を記録しましょう。
もし、あなたが私たちのフリーな助言 (
ログメッセージについてのフリーな助言
を参照
) に従わなかったら,
今がログメッセージを書くときです (ヒント: tla make-log
).
アーカイブのあなたの変更点を保存するには, 単にこうします:
% tla commit [....]
commit
が完了したのち, アーカイブには、新しいリビジョンが存在します:
% tla revisions hello-world--mainline--0.1 base-0 patch-1
または、もっと詳細に:
% tla revisions --summary hello-world--mainline--0.1 base-0 initial import patch-1 Fix bugs in the "hello world" string
プロジェクトツリーのパッチログは同様に更新されてます:
% tla logs hello-world--mainline--0.1 base-0 patch-1 % tla logs --summary hello-world--mainline--0.1 base-0 initial import patch-1 Fix bugs in the "hello world" string
commit
はアーカイブに対して何をするのでしょうか?
# 作業しているバージョンのディレクトリに cd する: # % cd ~/{archives} % cd 2003-example/ % cd hello-world/ % cd hello-world--mainline/ % cd hello-world--mainline--0.1/ % ls % ls +version-lock =README base-0 patch-1
patch-1
サブディレクトリは新しくできたものです:
% cd patch-1 % ls +revision-lock hello-world--mainline--0.1--patch-1.patches.tar.gz log
いつものように, ログファイルは、あなたが書いたもので, 付加的なヘッダが追加されてます:
% cat log Revision: hello-world--mainline--0.1--patch-1 Archive: lord@emf.net--2003-example Creator: Tom (testing) Lord <lord@emf.net> Date: Mon Jan 27 22:26:13 PST 2003 Standard-date: 2003-01-28 06:26:13 GMT Summary: Fix bugs in the "hello world" string Keywords: New-files: \ {arch}/hello-world/ [....] /patch-log/patch-1 Modified-files: hw.c New-patches: \ lord@emf.net--2003-example/hello-world--mainline--0.1--patch-1 Spell "world" correctly (not "warld"). Add a newline to the hello world message.
.patches.tar.gz
ファイルは チェンジセット (changeset) と呼ばれるものです。
それは、base-0
と patch-1
リビジョンの間の相異点としてあなたが変更した点を記述します.
後の章ではチェンジセットの性質に関してもっと習うでしょう。
今のところ, チェンジセットは次のように考えて良いです:
もし最近の変更の前の base-0
リビジョンと,
あなたの最近の変更の後の同じツリーを,
比較するのに使われるものならば,
これは diff -r
の出力と似たようなものです
(または, ある arch
の利用者に言わせれば,
"ステロイド上のパッチセット (patch set on steroids)" です).
プロジェクトツリーの中では:
% cd ~/wd/hello-world
commitコマンドは二つの作用がありました.
まず, {arch}/hello-world
の下にログファイルを追加しました。
次に、{arch}/++pristine-trees
を変更して, base-0
リビジョンの代わりに patch-1
リビジョンのキャッシュコピーを格納しました.
regexps.com