Last modified: 2003年10月1日

CVS FAQ

CVS に関するよくある質問について。


1 管理の開始
1.1 ファイルをディレクトリ単位でCVSで管理しはじめたい。管理するファイルはまだない。
1.2 ファイルをディレクトリ単位でCVSで管理しはじめたい。管理するファイル(ディレクトリ構造)がすでにある。
1.3 モジュールを定義したい。
1.4 'cvs -d リポジトリディレクトリ名 init'を実行したら、'cvs [init aborted]: CVSROOT リポジトリディレクトリ名 must be an absolute pathname' と表示された。
2 チェックアウト
2.1 リポジトリからモジュールを作業ディレクトリにコピーしたい。
2.2 チェックアウトしたら CVS という名前のディレクトリができた。
2.3 チェックアウトしたファイルを編集するためにロックをかけたい。
3 ファイルの更新
3.1 古いバージョンに戻してチェックインしたい。
4 ファイルの追加
4.1 新しいファイルを追加したい。
4.2 新しくディレクトリを追加したい。
4.3 'cvs add ディレクトリ' でディレクトリ以下が再帰的に追加されるか。
5 エクスポート
5.1 モジュールを公開するために cvs ディレクトリを含まないものが欲しい。
6 ログ
6.1 ファイルのログを見たい。
7 リモートリポジトリ
7.1 ssh 経由でリモートリポジトリにアクセスしたい。
8 タグ
8.1 あるファイルのリビジョンにタグをつけたい。
8.2 あるファイルについているタグを知りたい。
8.3 タグに使える文字は?
9 環境変数
9.1 リポジトリの場所を移動したので環境変数 CVSROOT の値を変更したのだが、変更前のリポジトリにアクセスしてしまう。
10 バイナリファイル
10.1 バイナリファイルを登録したい。
11 その他
11.1 Halibut とはなにか?


1 管理の開始


1. 1 ファイルをディレクトリ単位でCVSで管理しはじめたい。管理するファイルはまだない。

以下の手順を行なう。

  1. リポジトリの作成
    1. リポジトリのディレクトリを作成する。
      $mkdir リポジトリディレクトリ名
    2. リポジトリのパーミッションを設定する。

      リポジトリを利用するすべての人にディレクトリへの書き込み権限を与えられるようにする。 例えば開発者用のグループを作成し、ディレクトリにグループ書き込み許可を与える。

      $chgrp グループ名 リポジトリディレクトリ名
      $chmod g+w リポジトリディレクトリ名
      $chmod g+s リポジトリディレクトリ名
    3. リポジトリを作成する。
      $cvs -d リポジトリディレクトリ名 init
      このときリポジトリディレクトリ名はフルパス名で指定する必要がある。
  2. リポジトリディレクトリを環境変数 CVSROOT に設定する。
    sh 系の shell であれば
    $export CVSROOT=リポジトリディレクトリ名
  3. ディレクトリ構造の決定

    管理したいディレクトリの構造を決定する。 あとでも追加することができるので完全に決定しておく必要はない。

  4. ディレクトリの作成

    決定したディレクトリ構造と同じディレクトリ構造を適当な作業ディレクトリに作成する。

    $mkdir work
    $cd work
    $mkdir moduleA
    $mkdir moduleA/src
    $mkdir moduleA/include
    例) Windows95 ならば
    $mkdir work
    $cd work
    $mkdir moduleA
    $mkdir moduleA\src
    $mkdir moduleA\include
  5. リポジトリにディレクトリ構造を import する。
    $cvs import -m "Created directory structure" . 作成者名 start
    以下のメッセージ
    No conflicts created by this import
    というメッセージがでれば成功である。
  6. モジュールを定義する(「モジュールを定義したい。」)。

1. 2 ファイルをディレクトリ単位でCVSで管理しはじめたい。管理するファイル(ディレクトリ構造)がすでにある。

  1. リポジトリの作成
    1. リポジトリのディレクトリを作成する。
      $mkdir リポジトリディレクトリ名
    2. リポジトリのパーミッションを設定する。

      リポジトリを利用するすべての人にディレクトリへの書き込み権限を与えられるようにする。 例えば開発者用のグループを作成し、ディレクトリにグループ書き込み許可を与える。

      $chgrp グループ名 リポジトリディレクトリ名
      $chmod g+w リポジトリディレクトリ名
    3. リポジトリを作成する。 このときリポジトリディレクトリ名は絶対パス名で指定する。
      $cvs -d リポジトリディレクトリ名 init
  2. リポジトリディレクトリを環境変数 CVSROOT に設定する。
    sh 系の shell であれば
    $export CVSROOT=リポジトリディレクトリ名
  3. リポジトリにディレクトリ構造を import する。
    $cvs import -m "Imported sources" . 作成者名 start

    もしとりあえずなにがどこへ import されるか確認したければ上記のコマンドで cvs と import の間に -n オプションをいれて実行すればよい。

    以下のメッセージ

    No conflicts created by this import
    というメッセージがでれば成功である。
  4. モジュールを定義する(「モジュールを定義したい。」)。

1. 3 モジュールを定義したい。

  1. module ファイルをチェックアウトする。
    $cvs checkout CVSROOT/modules
    $cd CVSROOT
  2. module ファイルを編集
    例えば ディレクトリ moduleA を モジュール A と定義するとき
    A moduleA
    という行を追加する。
  3. module ファイルをコミットする。
    $cvs commit -m "Added the A module." modules
  4. CVSROOT モジュールを解放する。
    $cd ..
    $cvs release -d CVSROOT

1. 4 'cvs -d リポジトリディレクトリ名 init'を実行したら、'cvs [init aborted]: CVSROOT リポジトリディレクトリ名 must be an absolute pathname' と表示された。

(Windows 用では最初の文字列は CVS.EXE となる)

リポジトリディレクトリ名は絶対パス名で指定しなければならない。



2 チェックアウト


2. 1 リポジトリからモジュールを作業ディレクトリにコピーしたい。

checkout コマンドで行うことができる。
$cvs checkout モジュール名

2. 2 チェックアウトしたら CVS という名前のディレクトリができた。

このディレクトリには CVS が利用する情報が格納されている。 特別な場合でない限りこのディレクトリやこのディレクトリ内のファイルを変更、削除してはならない。


2. 3 チェックアウトしたファイルを編集するためにロックをかけたい。

RCS や SCCS などとは違いロックをかける必要はない。 複数の人間でバージョン管理をするときにはロックとは違った仕組みを利用している。



3 ファイルの更新


3. 1 古いバージョンに戻してチェックインしたい。

普通に古いリビジョンを指定してファイルをリポジトリから取り出すと Sticky が立ってしまい、HEAD として commit させられない。 この場合は、update コマンドの -j オプションを使用する。 作業用コピーが最新の状態で、
cvs update -j 最新のリビジョン番号 -j 古いリビジョン番号 ファイル名
とすると、Sticky を立てないで作業用コピーを古いバージョンにできる。 ここでチェックインをすれば 古いリビジョンの内容を再度、最新のリビジョンとして commit できる。

4 ファイルの追加


4. 1 新しいファイルを追加したい。

add コマンドを用いて追加することができる。
$cvs add ファイル名
で、追加を指示する。
cvs add: scheduling file ファイル名 for addition
cvs add: use 'cvs commit' to add this file permanently
というメッセージが表示される。ただしこの時点では追加されない。 commit することで実際に追加が行なわれる。
$cvs commit

4. 2 新しくディレクトリを追加したい。

add コマンドを用いて追加することができる。
$cvs add ディレクトリ名
で、追加する。
Directory ディレクトリ名 added to the repository
と表示されれば成功である。

4. 3 'cvs add ディレクトリ' でディレクトリ以下が再帰的に追加されるか。

されない。

5 エクスポート


5. 1 モジュールを公開するために cvs ディレクトリを含まないものが欲しい。

export コマンドを使う。
$cvs export モジュール名


6 ログ


6. 1 ファイルのログを見たい。

log コマンドを使う。
$cvs log ファイル名


7 リモートリポジトリ


7. 1 ssh 経由でリモートリポジトリにアクセスしたい。

rsh 経由のリモートリポジトリアクセスはセキュリティの面で問題が多い。 可能ならば ssh を使うことで、セキュリティを高めることができる。

サーバ側の設定。

  1. sshd インストール

その他は rsh 経由と同じ。

クライアント側の設定。

  1. ssh インストール
  2. ssh 設定
  3. 環境変数 CVS_RSH に ssh を指定する。

その他は rsh 経由接続と同じ。



8 タグ


8. 1 あるファイルのリビジョンにタグをつけたい。

tag コマンドを使う。

$cvs tag シンボル名 ファイル名

tag コマンドはリポジトリに対して働く。 したがって、作業ディレクトリにローカルに変更したファイルがあってもそれにタグがつく訳ではなく、チェックインしているリビジョンにつく。 tag の -c オプションを指定して

$cvs tag -c シンボル名 ファイル名

とすれば、ローカルで変更してある場合アボートしてくれるのでお勧めである。


8. 2 あるファイルについているタグを知りたい。

status コマンドを使う。

$cvs status -v ファイル名

8. 3 タグに使える文字は?

タグに使える文字は、英大文字、英小文字、数字、'-'、'_' である。ただし先頭の文字は英大文字または英小文字でなくてはならない。



9 環境変数


9. 1 リポジトリの場所を移動したので環境変数 CVSROOT の値を変更したのだが、変更前のリポジトリにアクセスしてしまう。

一度作業用ディレクトリを checkout すると、 CVS は CVS/Root ファイルにリポジトリの位置を保存し、以降これを利用する。 また CVS/Repository は現在のディレクトリに対応するリポジトリ上のディレクトリ名が保存されている。

新しいリポジトリに対して作業を行うには、今の作業コピーとは別に新しく checkout しなおすのが一番簡単である。

もし現在の作業コピーをそのまま利用したい場合は全ての CVS/Root, CVS/Repository の値を変更すれば良い。



10 バイナリファイル


10. 1 バイナリファイルを登録したい。

add する時、-kb オプションを指定する。 キーワード置換と、行末変換が抑制される。

$cvs add -kb newfile


11 その他


11. 1 Halibut とはなにか?

CVS 1.10 のコードネーム。オヒョウ(北洋産の大カレイ)の意。

CVShome.org の 'Halibut' リリース情報ページ
http://www.cvshome.org/docs/infohalibut.html