CVSの使い方(入門編)

Written by Masahiko KIMOTO
Copyright (c) 1998 by Masahiko KIMOTO.

はじめに

このドキュメントはCVSの使いかたを簡単に説明したものです。CVSの使いかた については、Web上に既に沢山存在するので、あえて新規にドキュメントを作 成する必要はないのかもしれません。しかし、研究室内で「使おうよ」と声を あげ、実際にみんなが使いはじめるようにするためには、やはり研究室の誰か が書いたドキュメントが必要になります。それは、ほんのきっかけを与える程 度の内容でも構いません。ポインタの集まりであっても構わないと思います。 重要なのは、そのコミュニティの内部から声をあげて、使いはじめることです。 既に研究室の中でも一部の人はCVSを当り前のように使っています。しかしな ぜか情報がうまく広まっていかない今の状況では、こっそり使っていても意味 がありません。ことあるごとに「CVSを使う」ことを主張しなければいけませ ん。以上の動機に基づきこのドキュメントを執筆しました(実は別のところで 使った原稿の焼き直しなんですけど。だからUNIXの話とWindowsの話が混在 しています)。

CVSによるソースファイル管理

複数の開発者による大規模ソフトウェアの共同開発を行う際には、ソースコー ドの共有とそのバージョン管理を効率的に行うことが重要になります。このよ うな時にはCVSを用いると便利です。CVSはレポジトリと呼ばれる保管庫でソー スコードを集中管理します。RCSのようなバージョン管理ソフトウェアと異な り、複数の開発者が同時にソースコードを編集することができます。CVSは UNIXだけでなく、Windowsでも利用できるため、UNIXとWindowsとでソースコー ドの共有を行うことも可能です。もちろんこのような開発支援ソフトウェアは 市販のものもあります。例えばWindowsの世界ではMicrosoftSourcecodeSafeな どが挙げられます。しかしCVSはUNIXとWindowsとのソースツリーの共有ができ ることや、無料で入手できるなどの利点があります。

CVSのインストール

CVSは現在、Cyclic Software社(http://www.cyclic.com/)によって開発、配布 されています。UNIX用のソースコードもWindows用のバイナリ形式も同社のFTP サイトからダウンロードできます。UNIXの場合はソースコードを展開して、 configure; make; make installを実行するだけです。BSD/OSでは最初から付 属しています。Windows版のCVSのインストールは次の手順で行ないます。 Windows版CVS-1.9のパッケージにはHTML形式の巨大なドキュメントが付属して います。後々のために、参照しやすい場所に保存しておくと良いでしょう。以 上でインストールは終りです。CVSはバックエンドでRCSを利用しています。 CVS-1.9のパッケージにはRCSのバイナリも含まれており、RCSも利用できるよ うになります。

WinCVSはGUIのフロントエンドがついたCVSです。それなりに使いやすいです。 こちらを利用するのも良いでしょう。

CVSの利用

さて、CVSではソースファイルをレポジトリと呼ばれる共有の保管庫に格納し ます。ソースファイルを編集するときは、最初にレポジトリから開発者の作業 用ディレクトリにソースファイルを複写します。開発者は複写した作業ディレ クトリのファイルに対して変更をおこないます。内容を変更した後、適宜レポ ジトリに対して反映させます。

CVSの利用手順を順番に説明していきましょう。CVSの実行バイナリは一つしか ありません。cvsの引数に副命令をつけて動作を指定します。

1. レポジトリの作成

この作業は最初の一回だけ管理者が行います。適当なディレクトリ(例えば /cvsrootとします)を作成し、レポジトリとして利用します。レポジトリの 指定は、cvsを実行するときの引数(例: cvs -d /cvsroot)でも指定できます が、通常は環境変数に指定しておいたほうが便利でしょう。環境変数CVSROOT の値(以降$CVSROOTと表します)がレポジトリを表します。Windowsでレポジト リを指定するときは注意が必要です。ドライブ名までを含めてレポジトリを指 定する場合ですが、後述するようにコロンで区切った左側はホスト名を意味し ます。ドライブ名まで指定する場合には":local:c:\cvsroot"のように記述し てください。$CVSROOTを指定したらレポジトリを初期化します。"cvs init"を 実行してください。

2. モジュールの登録

CVSを利用しはじめる時は、大抵ある程度までは個人レベルでの開発がすすん でおり、それを複数の開発者で修正しはじめるときでしょう。CVSによるファ イルの共有は、ソースファイル群をレポジトリに登録するところから始まりま す。ソースファイルが置かれているディレクトリに移動して次のコマンドを実 行します。
	cvs import MODULE VENDER INITIAL
MODULEはモジュール名、VENDERはファイルの作成者、INITIALはモジュール登 録時の状態をあらわします。モジュール名はこのソースファイルを取り出す時 にも使いますので、プログラムの名前にしておくのが適当でしょう。VENDERは 登録者の名前にします。INITIALは何でも構いません。筆者は'initial'という 文字列を使うようにしています。

3. モジュールの取り出し

編集するためには、まずレポジトリからファイルを取り出さなければなりませ ん。モジュールの取り出しには次のコマンドを実行します。
	cvs checkout MODULE
MODULEには先程のモジュール名を指定します。コマンドを実行したディレクト リにMODULEという名前にディレクトリが作成され、その下にソースファイル が展開されているはずです。

4. モジュールの編集

ファイルの編集は任意のエディタを用いて行なってください。

5. 最新版への追従

取り出したモジュールを編集している間に、他の人が変更内容をレポジトリに 書きこんでいる可能性があります。定期的に現在自分が作業しているファイル を最新のレポジトリの内容に追従させる必要があります。これには
          cvs update
を実行します。レポジトリの変更にともない、ディレクトリの追加が行われている 可能性があります。この場合は-dオプションを付けないと変更が反映されない ことに注意してください。付けておいて害はないので常にこのオプションを付けて
          cvs upodate -d 
を実行するようにしてもいいでしょうし、後述するように明示的に指定しなくても このオプションが自動的につくような設定にしておいても良いでしょう。

6. モジュールの変更の反映

次に変更した内容をレポジトリに反映させます。これを"commitする"と言いま す。commitするためには、自分が作業しているファイルが最新のものになって いる必要があります。commitする前に、まずupdateを実行しておいてください。 その後、
	cvs commit
を実行すると、変更内容がレポジトリに反映されます。

7. ファイルの追加/削除

ファイルの削除,追加をしたときには、その旨をレポジトリに伝える必要があ ります。ファイルの追加をした時には作成した後に
cvs add file file ...
を実行します。
ファイルを取り除きたい時は、ファイル本体を削除した後に
	cvs remove file file ...
をそれぞれ実行します。これらの変更は、次にcommitした時にレポジトリに反 映されます。

バイナリをファイルを追加する場合には、そのことを明示的に指定する 必要があります。CVSはcommit時に$Id: how-to-use-cvs-01.html,v 1.5 1999/08/14 17:15:54 kimoto Exp $などの文字列の置き換えを行います。 もし対照とするファイル中にこの文字列が発見された場合(プログラムの実行 形式の場合は十分このシチュエーションが起こり得ます)は、置換されて しまい不具合を生じる可能性があります。バイナリファイルを追加する場合は 以下のようにオプションをつけてcvs addしてください。

       cvs add -kb file file ....

通常の作業は上記の4から6を繰り返すことになります。

 3 (取り出し)
 |
 4 (編集) <-+
 |          |
 5 (追従)   |
 |          |
 6 (反映) --+

CVSを用いたファイルの共有

さて$CVSROOTは他の計算機を指定することもできます。この場合レポジトリへ の操作は他の計算機のレポジトリへの操作になります。サーバでソースファイ ルを一元管理し、複数の計算機で並行してソースファイルを編集するときに用 います。ここではサーバではUNIXが稼働していることを仮定し、rshを用いた 接続方法について紹介します。Windowsの場合は、まずrshクライアントをイン ストールしなければなりません。Windows95/NT用のrshクライアントは http://home.us.net/~silviu/rsh/rsh.zipから入手できます。アーカイブを展 開するとソースファイルと実行バイナリが現れますので、実行バイナリをパス が通ったディレクトリに移動します。試しにサーバに対してrshを実行してみ てください。

ではサーバのレポジトリに対する操作について説明していきます。まずサーバ の~/.rhostsを適当に記述し、サーバに対してパスワードなしでrshが実行でき るようにしておいてください。次に$CVSROOTを設定します。例としてユーザ名 がdevelopper,サーバホスト名がcvsserver,レポジトリのパスが/cvsrootだと すると、環境変数CVSROOTの値は'developper@cvsserver:/cvsroot' にします。 ユーザ名は省略することができ、この場合は'cvsserver:/cvsroot'の形式にな ります。このとき、ユーザdevelopperが/cvsroot以下のファイルを操作できる 必要があります。例えば開発者用のグループを作成し、/cvsroot以下のファイ ルをそのグループに所属するファイルとし、ユーザdevelopperをそのグループ に所属させるといった方法が一般的でしょう。

ここまで準備が済んだら、あとは通常の手順でcheckout,commitできます。も しうまくいかないようでしたら、rshを使うことを明示的に指示してみてくだ さい。環境変数CVS_RSHにrshのパスを記述し、環境変数CVSROOTを': ext:developper@cvsserver:/cvsroot'としてください。またレポジトリの場所 は、checkoutした時に手もとのディレクトリに記録されますので、レポジトリ を他のサーバを移動させる場合などは注意してください。

SSHの使い方

ところで、LAN内で使っている分にはまだ良いのですが、rshはセキュリティホー ルになりやすいという欠点があります。最近では、rshの代わりにssh(Secure Shell)を使うのが一般的です。sshでは通信路も暗号化されるので、外部のネッ トワークを経由するような場合でも安心です。先程指定した環境変数CVS_RSH の値をsshのパスに置き換えるだけです。もちろん、接続する相手のサーバは sshを受け付けられるようになっていないといけません。Windows95/NTでもssh クライアントは利用できます。 ftp://ftp.win.or.jp/pub/shell/ssh/contrib/ssh-1.2.14-win32bin.zip

さらに、外部からsshで到達できるホストとレポジトリがあるホストが 異なる場合の対処方法をお教えします。用はCVS_RSHに"ssh rsh cvs-server" と記述できれば良いのですが、これではうまくいきません。 なぜなら、CVSがCVS_RSHのコマンドを実行するときにexecシステムコールを 利用しているからです。多分ね。

はい、もうわかりましたね。CVS_RSHには空白を含む文字列を書いた場合、 適当に空白で区切って処理してくれないのが問題なわけです。だから、 ssh rsh cvs-serverを実行するシェルスクリプトを書いてやれば良いわけです。 例えばsrshという以下のようなスクリプトを作成します。


#!/bin/sh
ssh rsh cvs-server

で、CVS_RSHにsrshを代入します。これで大丈夫です。sshで一歩またいで cvs-serverにアクセスできます。

暗示的に指定するオプションの設定など

updateの箇所で述べたように、常に指定しておいたほうが便利なオプションが あります。これらのオプションの指定などは~/.cvsrcに記述しておけます。 このファイルには一行につきCVSコマンド名 と オプションを記述します。 例えば
update -d
と記述しておけば、cvs updateの際には必ず-dオプションが付いているものと みなされます。
Masahiko KIMOTO <kimoto@ohnolab.org>
Last modified: Mon Aug 9 16:26:13 1999