% 表題 CVS の使いかた % $Id: cvs.txt,v 1.4 1999/02/18 13:12:42 toyoda Exp toyoda $ % % 作成 1999/02/17 豊田英司 % 履歴 (RCS で管理されているので末尾にログ付属) 0. CVS とは何か CVS は複数のファイル群を扱うバージョン管理システムである。 RCS はひとつのファイルしか管理できないのに対し、CVS ならば ファイルの増減まで含めたバージョン管理ができる。 CVS は内部で RCS を使用し、RCS は内部で diff を用いる。 1. 準備 (毎日やることではないこと) 1.1 インストール Debian GNU/Linux では rcs, cvs パッケージをインストールすること。 cvs のインストール時にデフォルトレポジトリを問われるが、 適当にディレクトリ名を入力すること。 1.2 レポジトリの準備 CVS の管理する単位はディレクトリ (モジュールと呼ぶ) である。 CVS はレポジトリと呼ばれるディレクトリの中に このディレクトリツリーのコピーを置き、この中に RCS ファイルを 置いてファイルのバージョンを管理する。 ファイルを編集または参照したいユーザが cvs co コマンドで 要求すると、そこからカレントディレクトリに作業用ファイルが作られ、 適宜 cvs commit コマンドでレポジトリ内の RCS ファイルに履歴を 蓄積させてゆく。 したがって、レポジトリがなければ作らなければいけない。 すでに用意されたレポジトリを共有する場合はこの操作は不要である。 レポジトリは cvs パッケージのインストール時または /etc/cvs.conf などによって決まっているが、それ以外のものを用いたい場合は CVSROOT 環境変数に (-d オプションでもよいが面倒だよね) 設定する。 レポジトリが決まったら $ cvs init コマンドで初期化をおこなう。 2. ふだんの作業 2.1 最初の登録 まず管理してほしいディレクトリを用意する。 make clean などをして、この中に派生的ファイルが残らないようにする。 (Makefile がないなどは論外!) $ cvs import -m "Initial Dirs" でディレクトリ構成がレポジトリに登録される。 はモジュールの名前、これがレポジトリ内部での置場の名前 にもなる。ディレクトリ名かプログラム名でも書いておけばよかろう。 はレポジトリを共有している場合にソースの ベンダーすなわち作者あるいは作成団体をあらわすものらしい。 個人で使っているなら自分のログイン名でも書いておけばいいだろう。 はよくわからない。文献[1] では "initial" を使えと いっているのでそうするのがよかろう。 つまり、たとえば toyoda さんが htroff というプロジェクトの登録を するには $ cvs import -m "Initial Dirs" htroff toyoda initial とする。文献 [1] ではこのあとすべてのファイルに対して cvs add する 必要があるように書かれているが、筆者の環境 (Debian GNU/Linux 2.0) では不要である。 いずれにしても cvs add されたあとはファイルは保存されているわけ であるから、いつでもいくつでも作業用ファイルは作れるので、 もとのディレクトリは消してしまってかまわない。 2.2 日頃の利用 2.2.1 ファイルの取得 作業用ファイルを無から作るには、 $ cvs co コマンドでカレントディレクトリにモジュールの ディレクトリツリーが再現される。 カレントディレクトリは cvs import したところでなくてもよい。 なお、カレントディレクトリとモジュールの各ディレクトリに CVS という CVS の作業用のディレクトリが生成されるが、 これはいじってはいけないらしい。 いったん cvs co したらレポジトリの設定が書き込まれるので 以下の操作では CVSROOT 環境変数の設定はいらない。 2.2.2 最新版ファイルの取得 モジュールの作業用コピーが複数存在している場合、 他の作業用ファイルで 履歴登録が行われるとこれを反映させる 必要がある。そのためにはモジュールのディレクトリに行って $ cvs update とする。 2.2.3 最新版の登録 現状をレポジトリに登録するには $ cvs commit とする。RCS のログを登録する必要が出てくるので、面倒だと 思われる場合は $ cvs commit -m 'メッセージ' とする手もある。 2.2.4 最新版からの変更点の確認 最後に cvs commit された状態から現状への差分は $ cvs diff とすると得られる。patch(1) が読む context diff 形式に するには $ cvs diff -c とする。 2.2.5 タグ付け 後で古いファイルを復元する必要が生じた場合、 基本的には日付によって指定することになるが、 おぼえやすいようにタグ (tag) を付けることができる。 $ cvs tag 2.2.6 ファイルの追加 モジュールにファイルを追加するときは $ cvs add あとで cvs commit をしなくてはならない。 2.2.7 ファイルの削除 モジュールからファイルを削除するときは $ rm ; cvs rm やはりあとで cvs commit をしなくてはならない。 このときレポジトリから RCS ファイルが除去されるわけではないので、 ちゃんと古い版を指定して cvs co すれば cvs rm したファイルも 取得できる。 2回コマンドを打たなければならないので、 にワイルドカードを使おうとするとちょっと困る。 3. CVS が役に立つとき 3.1 古いファイルを復元したい たいていは以下のどれかの形式が役に立つだろう。 $ cvs co -r $ cvs co -D '4 days ago' 3.2 ある版からある版への差分を生成したい $ cvs diff -c -r -r 3.3 あるファイルの履歴を表示したい $ cvs log 4. リモート操作 CVS レポジトリが存在するのと別の機械で編集作業をおこなう ことが可能である。この場合は ssh を用いるのが一番便利である。 作業を行う機械で以下の手順に従われたい。 a) CVS_RSH 環境変数に ssh と設定する $ export CVS_RSH=ssh b) レポジトリを持つ機械から取得 ... ややこしいのはここだけ $ cvs -d :ext:toyoda@red:/home/gate/cvsroot co 以後はモジュールのディレクトリツリーにどこからとってきたかが 記入されるので、CVS_RSH 環境変数の設定だけで 操作ができるようになる。 参考文献 [1] 「CVS」(連載 UNIX知恵袋 第33回), 島慶一, UNIX MAGAZINE 1997.11 [2] 「CVS の使い方」 http://www.race.u-tokyo.ac.jp/users/moro/cvs/ % 以下は RCS の作る履歴情報 % % $Log: cvs.txt,v $ % Revision 1.4 1999/02/18 13:12:42 toyoda % いちおうひととおり書いてみた。 % % Revision 1.3 1999/02/17 08:28:48 toyoda % cvs import のところまで書いた。 % % Revision 1.2 1999/02/17 07:53:50 toyoda % RCS Log: moved to end of file % % Revision 1.1 1999/02/17 07:44:39 toyoda % Initial revision %