regexps.com
もし以前の章の例題を習ってるなら, 次のものがあるはずです:
あなたの最初のアーカイブ これはあなたのデフォルトのアーカイブでもあります:
% tla my-default-archive
lord@emf.net--2003-example
% tla whereis-archive lord@emf.net--2003-example
/usr/lord/examples/{archives}/2003-example
アーカイブの中の hello-world プロジェクト
% tla categories
hello-world
% tla branches hello-world
hello-world--mainline
% tla versions hello-world--mainline
hello-world--mainline--0.1
hello-world プロジェクトの二つのリビジョン
% tla revisions hello-world--mainline--0.1
base-0
patch-1
この章では、あなたのアーカイブからリビジョンを取り出す方法を習います.
残りもののプロジェクトツリーがあるかもしれません. もしそうなら、それを取り除きましょう:
% cd ~/wd
% ls
hello-world
% rm -rf hello-world
いま hello world プロジェクトの最新ソースを取得したいとしましょう。
そのために、get コマンドを使わねばなりません:
% tla get hello-world--mainline--0.1 hello-world
[...]
% ls
hello-world
% ls hello-world
hw.c main.c {arch}
hello-world プロジェクトの以前のバージョンをチェックアウトしたいとします.
前の例において、プロジェクトの特定のバージョンだけを求めたことに注目してください:
% tla get hello-world--mainline--0.1 hello-world
^^^^^^^^^^^ ^^^^^^^^ ^^^ ^^^^^^^^^^^
| | | |
| | | ターゲットディレクトリ
| | |
| | |
| | バージョン番号
| |
| ブランチ名
|
カテゴリ名
そのパッチレベルを明示的に指定することで, 以前のリビジョン名を取り出すことができます:
% tla get hello-world--mainline--0.1--base-0 hello-world-0
^^^^^^^^^^^ ^^^^^^^^ ^^^ ^^^^^^ ^^^^^^^^^^^^^
| | | | |
| | | | ターゲットディレクトリ
| | | |
| | | パッチレベル名
| | |
| | バージョン番号
| |
| ブランチ名
|
カテゴリ名
% ls
hello-world hello-world-0
% ls hello-world-0
hw.c main.c {arch}
例えば diff -r で, base-0 から patch-1 でなされた変更点を知ることができます:
% diff -r hello-world-0 hello-world
diff -r hello-world-0/hw.c hello-world/hw.c
7c7
< (void)printf ("hello warld");
---
> (void)printf ("hello world\n");
[...]
base-0 リビジョンの取得は簡単です。
以前説明したように, base-0 リビジョンは完全なソースツリーの圧縮された tar ファイルとして格納されます
(それはどのように動作するか -- import は何をするかを参照).
base-0 を取得するように頼まれた時、
get コマンドは, 実質的には, その tar ファイルを展開するだけです.
patch-1 リビジョンの取得は二段階あります.
base-0 は, base-0 と patch-1 の間の差分を記述する, チェンジセットとして格納されていることを思いだしてください
(それはどのように動作するか -- 新しいリビジョンの commitを参照)。
したがって, get は最初に base-0 リビジョンを取得し、
それから、patch-1 のチェンジセットを取得し、
それから、そのチェンジセットで base-0 ツリーを修正して
patch-1 ツリーにします.
内部的には、get は, チェンジセットを適用するために
dopatch と呼ばれる tla コマンドを使います.
しかし、diff/patch という patchsets に慣れているなら,
dopatch のことを"ステロイドでのパッチ"と思ってよいです.
一つだけの変更ではなく, 沢山の変更をコミットしたときを考えましょう:
patch-1 リビジョンだけでなく, patch-2,
patch-3 などがある場合です.
要するに, get は要求されたリビジョンを作成するために, それぞれのチェンジセットを適用します.
注意: 実は, get はここで記述されるよりは少し複雑です。
一方で, get がチェンジセットの長いリストを適用しないですむような実行最適化があります.
もう一方で, commit ではなくて, tag で作られるリビジョンには, 別の規則が適用されます.
後の章でこれらの例外についてさらに習うでしょう.
regexps.com