ノード:Exporting For Public Distribution, 次:, 前:Tracking Third-Party Sources (Vendor Branches), 上:Advanced CVS



Exporting For Public Distribution

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 はリリースやパッケージの処理をするスク リプトから呼ばれることが多いでしょう。公のリリースに先立っていくつか の「テスト」リリースをするような場合は、リリースパッケージを作成する 処理は高度に自動化されていることが望ましいと思います。