DNA Cafe | Download | FreeSoftware | Java | Links

DNA - フリーソフトウエア - CVS

CVS はバージョンコントロールシステムであり、 古いバージョンのファイル(通常はソースコード)を保持し、 誰が、いつ、なぜ変更したか、などをログに記録する。

CVS の用語

まずは CVS で使われる用語を簡単に説明する。 これらの言葉は一般的な構成管理でもしばしば使われる。

チェックアウト (check out)
リポジトリに作業用コピーを要求すること
コミット (commit)
作業用コピーに加えた変更内容を中央のリポジトリに送ること。 チェックイン (check in) とも呼ばれる
競合 (conflict)
複数の開発者が同じファイルの同じ領域に対して変更をコミットしようとすること。
ログメッセージ (log message)
リビジョンをコミットするときにつける内容を説明するコメント
リポジトリ (repository)
CVS がプロジェクトの全リビジョン履歴を保存するマスター
リビジョン (revision)
ファイルの履歴上でコミットされた変更内容
更新 (update)
変更内容をリポジトリから取り出して自分の作業用コピーに反映し、 自分の作業用コピーにコミットしていない変更がないか確認すること
作業用コピー (working copy)
プロジェクトに変更を加える時に編集するコピー

最初に理解しなければならないのは CVS はすべてのファイルを中央のレポジトリ中で蓄えるということである。


リポジトリ

CVS リポジトリはバージョン制御下にあるすべてのファイルとディレクトリの完全なコピーを蓄えている。 通常、リポジトリディレクトリ中のどんなファイルにも直接アクセスはしない。

リポジトリの初期化

リポジトリの初期化は CVSROOT のディレクトリといくつかのデフォルトの制御ファイルの追加によっておこわれる。 リポジトリを使用する前に、以下のコマンドを使うか、他の方法でリポジトリを初期化しなければならない。

$ mkdir CVS_root_directory
$ CVSROOT=CVS_root_directory
$ export CVSROOT
$ cvs init

ソース配布物をインポート

最初に、新しいソースを vendor のリポジトリへ登録する。

$ cd source_distribution_directory
$ cvs import repository vendor_tag release_tag ...

スナップショットをとる

$ cvs tag tag

ブランチを作る

Explicitly specify a symbolic tag for particular revisions of files in the source repository.

$ cvs rtag -b -r existing_revision_or_tag branch_tag modules

ブランチ名を変える

$ cvs admin -n new_branch:old_branch


あー、困った、そんなとき(管理者向け)

ファイルをバイナリとして扱う

$ cvs admin -kb file

ファイルを完全に削除する

手間がかかるが、ファイルをリポジトリから完全に削除できる。 $ cd CVS_root_directory
$ cd project/path_to_file $ rm file リポジトリからそのファイルを削除する。 リポジトリ上でのファイル名は file,v となっている。 そのファイルがタグを使っているなら CVSROOT/val-tags からその行を削除する。 CVSROOT/history からそのファイルが含まれる行を削除する。

プロジェクトを完全に削除する

$ cd CVS_root_directory
$ rm -r project


典型的な使用手順

まず最初に理解しなければならないのは CVS はすべてのファイルを中央のレポジトリ中で蓄えるということである。

モジュールのチェックアウト

$ mkdir work_directory
$ cd work_directory
$ cvs checkout -r revision_or_tag modules

レポジトリへディレクトリを追加する

$ cvs add directory

レポジトリへファイルを追加する

$ cvs add file

リポジトリからファイルを削除する

$ cvs remove -f file

リポジトリにあるファイル名を変える

CVS FAQ を読むこと。 なぜなら、ファイル名を変える方法は一つではないから(ってわかってるよな?)。

モジュールを更新する

$ cvs update -d -r revision_or_tag

差分を見る

$ cvs diff [-c] [-r revision_or_tag [-r revision_or_tag ...]

変更したモジュールをコミットする

$ cvs commit

チェックアウトを取り消す

$ cvs release


パスワード認証サーバ

サーバ側では、ポートの接続要求を受けた時に cvs pserver のコマンドを走らせるように inetd の設定が必要になる。

以下のそれぞれのファイルに行を追加する(既にないか調べること)。

/etc/services
cvspserver 2401/tcp
/etc/inetd.conf
cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=path pserver
/etc/hosts.allow
cvs: LOCAL

RedHat などで xinetd を使っている場合は inetd.conf の代わりに、 以下のファイルを作成する。

/etc/xinetd.d/cvsserver
cvsserver ファイルの内容

変更後、設定を反映させるために inetd へ SIGHUP シグナルを送る。

次に、パスワードを CVS の passwd ファイルに設定する。 ファイルは `$CVSROOT/CVSROOT/passwd' である。 以下に例を示す。

CVSROOT/passwd
anonymous:
daisuke:tGX1fS8sun6rY
someone:1sOp854gDF3DY:pubcvs

`passwd' ファイルは直に作成や修正をする。 これは `passwd' ファイルがチェックアウトした作業用コピーに含まれるとセキュリティ上危険だから。

(パスワードファイルを作る簡単なプログラム → cvspasswd.tar.gz

続いて設定ファイルを更新するために CVSROOT をチェックアウトして修正する。

$ cvs checkout CVSROOT

CVSROOT/config
SystemAuth=no
CVSROOT/readers
anonymous
daisuke
someone

CVSROOT/writers
daisuke
someone

最後にコミットして終了。

$ cvs commit


SSH を経由する ext アクセス方式サーバ

CVS は リモートシェル経由で使うこともできる。 この場合、ユーザー認証は通常のリモートシェルの認証と同じやり方になる。

サーバ側では、リポジトリにアクセスするユーザーのアカウントを作る。 cvs をグループに追加し、ユーザーをこのグループに含める。

またユーザーにシェルでのアクセス権を与えたくない場合には rssh を使うとよい。

$ groupadd -g 1234 cvs
$ useradd -s /usr/local/bin/rssh user
$ vigr

例えばグループは以下のようになる。

/etc/group
cvs:*:1234:user

さらにグループ cvs に対してリポジトリのグループ所有権とアクセス権を与える。

$ cd CVS_root_directory
$ chgrp -R cvs .
$ chmod ug+rwx . CVSROOT

リポジトリへの接続

クライアント側では以下のように二つの環境変数を指定してアクセスする。

$ CVS_RSH=ssh
$ CVSROOT=:ext:user@host:path
$ export CVS_RSH CVSROOT
$ cvs command


参考ページ

http://ximbiot.com/cvs/wiki/
Ximbiot - CVS Wiki
http://www.viewvc.org/
ViewVC: Repository Browsing
http://cvsgui.sourceforge.net/
CvsGui.org

Vector Valid XHTML 1.1! Valid CSS!