Node: Exporting For Public Distribution, Next: The Humble Guru, Previous: Tracking Third-Party Sources (Vendor Branches), Up: Advanced CVS
CVS は開発者にとっては良い配布機構なのですが、大部分のユーザがソフト ウェアを取ってくる時にはダウンロードできるパッケージを取ってくると思 います。このパッケージは一般には CVS の作業コピーではなくただのソー スツリーで、ユーザのシステムに合わせて簡単にコンフィギュレーション・ コンパイルができるようになっているものです。
しかし、CVS はパッケージを作るのに便利な機構を提供しています。
cvs export
コマンドです。プロジェクトをエクスポート
するというのは、プロジェクトの作業コピーをチェックアウトするのと同じ
ようなものですが、CVS
管理サブディレクトリを抜きにして
プロジェクトツリーをチェックアウトするというところが違います。これは
つまり、作業コピーではなくソースツリーだけを取得したということになり
ます。そのソースツリーはどこから来たものなのか、それらのファイルがど
の CVS バージョンなのかわかりません。つまり、エクスポートされたコピー
はダウンロードしてディストリビューションをほどいたときの状態と同じな
のです。そのプロジェクトが作業コピーから直接コンパイルできるようになっ
ているとすると(そしてそうなっているべきなのです!)、エクスポートされ
たコピーもコンパイルできるはずです。
export
コマンドは checkout
と同じように動作しますが、
タグ名か日付を指定しなければいけないというところが違います。プロジェ
クトにリリース名でタグをつけて、それに基づいてエクスポートしてみましょ
う:
floss$ pwd /home/jrandom/myproj floss$ cvs -q tag R_1_0 T README.txt T hello.c T a-subdir/whatever.c T a-subdir/subsubdir/fish.c T b-subdir/random.c floss$ cd .. floss$ cvs -d /usr/local/newrepos -q export -r R_1_0 -d myproj-1.0 myproj U myproj-1.0/README.txt U myproj-1.0/hello.c U myproj-1.0/a-subdir/whatever.c U myproj-1.0/a-subdir/subsubdir/fish.c U myproj-1.0/b-subdir/random.c floss$ cd myproj-1.0 floss$ ls README.txt a-subdir b-subdir hello.c
export
コマンドは作業コピーの中ではないところで起動されるので、
どのリポジトリを使うかを -d
グローバルオプションで指定してや
らなければならないことに注意して下さい。またこの例では、ディレクトリ
名をデフォルトのプロジェクト名ではなく、明示的に指定して
(myproj-1.0
)エクスポートしています。その名前で作業コピーが既
に存在しているからです。この状況は珍しいことではないと思います。
上の例のようにエクスポートコピーが作成されたあとは、プロジェクトが単 純なものの場合、次のようにすればリリースが完了します:
floss$ tar cf myproj-1.0.tar myproj-1.0 floss$ gzip --best myproj-1.0.tar floss$ ls myproj/ myproj-1.0/ myproj-1.0.tar.gz floss$ rm -rf myproj-1.0 floss$ mv myproj-1.0.tar.gz /home/ftp/pub/myproj/
もちろん、これらのコマンドを全部手で走らせたりすることはめったにあり
ません。cvs export
はリリースやパッケージの処理をするスク
リプトから呼ばれることが多いでしょう。公のリリースに先立っていくつか
の「テスト」リリースをするような場合は、リリースパッケージを作成する
処理は高度に自動化されていることが望ましいと思います。