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