玄箱CVSサーバをコマンドラインから使ってみる

ここまでで、玄箱CVSサーバの準備ができました。 最初は、玄箱のコマンドラインからCVSを使ってみます。 以下の作業は、 TELNETで玄箱にLOGINしてから 行います。

リポジトリ位置を指定する

CVSクライアントは、使用すべきリポジトリを明示して使用します。 リポジトリの位置は、CVSのコマンドで指定することも 可能なのですが、いちいちコマンドラインで指定するのも面倒です。 この手間を省くためには、CVSROOTという環境変数に リポジトリの位置を指定します。

noritan@NORITAN-BOX:~$ echo $SHELL
/bin/bash
noritan@NORITAN-BOX:~$ CVSROOT=/mnt/cvs/rep
noritan@NORITAN-BOX:~$ export CVSROOT

ここで例として使用しているコマンドシェルは、bin/bashです。 他のシェルの場合には、書き方が違うので注意してください。

モジュールを準備する

次に、リポジトリに登録すべきファイルを準備します。

noritan@NORITAN-BOX:~$ mkdir cvs-test
noritan@NORITAN-BOX:~$ cd cvs-test
noritan@NORITAN-BOX:~/cvs-test$ echo TEST > test.txt

CVSでは、登録するファイルを入れたディレクトリの単位を モジュールと呼んでいます。 この例では、中にtest.txtというファイルを一つだけ入れた cvs-testというモジュールを作成します。

モジュールをリポジトリに登録する

出来上がったモジュールをリポジトリに登録します。 登録には、importサブコマンドを使用します。

noritan@NORITAN-BOX:~/cvs-test$ cvs import -d -m "start point" cvs-test noritan REV0
N cvs-test/test.txt

No conflicts created by this import
cvs import
cvsコマンドにimportサブコマンドをつけて 呼び出します。 リポジトリに新たにモジュールを追加するのが、 importサブコマンドの役割です。
-d
CVSサーバは、ファイルが更新された日付を記録していますが、 通常はファイルを登録した日付になります。 このオプションを使うと、 ファイル自身の変更日付を使って登録が行われます。
-m "start point"
ファイルを登録または更新した際には、 どのような理由によって登録・更新が行われたかを明記する ログ・メッセージを残すことができます。 このオプションで、ログ・メッセージを指定することができます。 また、このオプションが指定されなかった場合には、 自動的にメッセージを入力するためのテキスト・エディタが開きます。
cvs-test
"cvs-test"という名前のモジュールを作成します。
noritan
ここには、"vender-tag"という所属組織を示す印を指定します。 個人で使うときには必要ないようにも思いますが、 必須パラメータなので何か入れなくてはなりません。
REV0
ここには、"release-tag"というファイル群のバージョンを示す印を 指定します。 "release-tag"は、ファイル群をリリースする際の目印として良く使用されます。 これも必須パラメータなので何か入れなくてはなりません。

オプションのヘルプを見たい

cvsコマンドには、多くのサブコマンドとオプションがあります。 サブコマンドの一覧は、 --help-commandsオプションで表示されます。 オプションの一覧は、 --helpオプションにサブコマンドを続けると表示されます。

noritan@NORITAN-BOX:~/cvs-test$ cvs --help import
Usage: cvs import [-d] [-k subst] [-I ign] [-m msg] [-b branch]
    [-W spec] repository vendor-tag release-tags...
        -d      Use the file's modification time as the time of import.
        -k sub  Set default RCS keyword substitution mode.
        -I ign  More files to ignore (! to reset).
        -b bra  Vendor branch id.
        -m msg  Log message.
        -W spec Wrappers specification line.
(Specify the --help global option for a list of other help options)
noritan@NORITAN-BOX:~/cvs-test$

リポジトリを見てみる

モジュールが登録されたかどうかは、リポジトリを見ると確認できます。

noritan@NORITAN-BOX:~/cvs-test$ ls -al /mnt/cvs/rep/cvs-test
total 12
drwxrwxr-x    2 noritan  users        4096 Oct 30 22:36 .
drwxrwxr-x    9 cvs      users        4096 Oct 30 22:36 ..
-r--r--r--    1 noritan  users         387 Oct 30 22:36 test.txt,v

cvsコマンドからモジュールが確認できるか?

ここでは、モジュールを確認するためにリポジトリのディレクトリを見ました。 ところが、通常のCVSサーバは、ネットワークの向こうに存在するため、 リポジトリのディレクトリなど見ることはできません。

たぶん、他に方法があるのだと考えてはいますが、 いまだ、発見できずにいます。

作業場所を作る

CVSを使う場合、ワークスペースという自分専用の作業場所を作成します。 さきほど、モジュールを作成したときに使ったディレクトリを そのまま使ってもかまいません。 しかし、万が一を考えて、さきほどとは別のディレクトリを作成します。

noritan@NORITAN-BOX:~$ mkdir ~/workspace/
noritan@NORITAN-BOX:~$ cd ~/workspace

ホームディレクトリにworkspaceというディレクトリを 作成して、移動します。

noritan@NORITAN-BOX:~/workspace$ cvs checkout cvs-test
cvs checkout: Updating cvs-test
U cvs-test/test.txt

この作業場所でcheckoutサブコマンドを使って、 cvs-testモジュールを使う作業場所ができます。

noritan@NORITAN-BOX:~/workspace$ cd cvs-test
noritan@NORITAN-BOX:~/workspace/cvs-test$ ls -al
total 16
drwxr-xr-x    3 noritan  users        4096 Oct 31 21:13 .
drwxr-xr-x    3 noritan  users        4096 Oct 31 21:13 ..
drwxr-xr-x    2 noritan  users        4096 Oct 31 21:13 CVS
-rw-r--r--    1 noritan  users           5 Oct 30 22:32 test.txt

中には、cvs-testモジュールで作成したtest.txtという ファイルが存在しています。

CVSというディレクトリ

上の例でわかるように作った覚えの無いCVSというディレクトリが できています。 このディレクトリには、このモジュールの素性を知らせる情報が入っていますので、 削除したり変更したりしないでください。

CVSディレクトリの無いモジュールが欲しい場合には、 checkoutサブコマンドの変わりにexportコマンドを 使用します。

ファイルを更新してみる

作業場所に持ってきたファイルは、更新することができます。 ここでは、ファイルの末尾に"UPDATED"の一行を追加します。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cat test.txt
TEST
noritan@NORITAN-BOX:~/workspace/cvs-test$ echo "UPDATED" >> test.txt
noritan@NORITAN-BOX:~/workspace/cvs-test$ cat test.txt
TEST
UPDATED

更新したファイルを新しいバージョンとしてリポジトリに登録します。 この時に使用するサブコマンドは、commitです。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cvs commit -m "updated file" test.txt
Checking in test.txt;
/mnt/cvs/rep/cvs-test/test.txt,v  <--  test.txt
new revision: 1.2; previous revision: 1.1
done

これで、test.txtファイルは、バージョン1.1からバージョン1.2に 更新されました。 リポジトリも変更されています。

noritan@NORITAN-BOX:~/workspace/cvs-test$ ls -al /mnt/cvs/rep/cvs-test
total 12
drwxrwxr-x    2 noritan  users        4096 Oct 31 21:28 .
drwxrwxr-x    9 cvs      users        4096 Oct 30 22:36 ..
-r--r--r--    1 noritan  users         463 Oct 31 21:28 test.txt,v

RCSキーワードを使ってみる

先ほどのファイルは、バージョン1.2になったのですが、 これだけではファイル自身を見てバージョンが判別できるわけでは ありません。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cat test.txt
TEST
UPDATED

CVSでは、ファイルのバージョンを識別できる印を自動的に挿入することができる RCSキーワードという仕組みを持っています。 RSCキーワードには、さまざまな種類がありますが、 ここでは、キーワード$Id$について試してみます。

noritan@NORITAN-BOX:~/workspace/cvs-test$ echo '$Id$' >> test.txt
noritan@NORITAN-BOX:~/workspace/cvs-test$ cat test.txt
TEST
UPDATED
$Id$

ファイルの末尾に$Id$という行を加えます。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cvs commit -m "Added Id" test.txt
Checking in test.txt;
/mnt/cvs/rep/cvs-test/test.txt,v  <--  test.txt
new revision: 1.3; previous revision: 1.2
done

このファイルをcommitサブコマンドでリポジトリに登録します。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cat test.txt
TEST
UPDATED
$Id: test.txt,v 1.3 2006/10/31 12:36:18 noritan Exp $

すると、$Id$キーワードがファイルの素性をあらわす 文字列に置き換えられます。 これで、ファイルを見ただけで、ファイルのバージョンを識別することが できるようになりました。

RCSキーワードの具体的な使い方

上の例のようにRCSキーワードは自動的に置き換えられてしまいますので、 置き換えられたことによって文法的に問題が発生するような箇所に キーワードを配置することはできません。

そのため、キーワードは、プログラムのコメント中に置いたり、 文字列中に置いたりすることが多いようです。 プログラムのコメントに置いた場合には、 コンパイルした後のファイルにはキーワードは残りませんが、 文字列中に置いた場合には、コンパイル後も実行ファイルに キーワードが残ります。

作業場所を削除する

ワークスペースは、何も考えずに削除してしまってかまわないのですが、 cvsコマンドを使って削除することもできます。

noritan@NORITAN-BOX:~/workspace/cvs-test$ cd ../
noritan@NORITAN-BOX:~/workspace$ cvs release -d cvs-test
You have [0] altered files in this repository.
Are you sure you want to release (and delete) directory `cvs-test': y

ワークスペースの削除には、-dオプションを付けた releaseサブコマンドを使用します。 「本当に削除しても良いか」とプロンプトがでてきますので、 yを入力して承認します。

Updated: $Date: 2006/11/06 12:46:35 $

Copyright (C) 2006 noritan.org ■