CVS: Concurrent Version System


CVS は強力なバージョン管理ツールです。 Linux サーバ上に CVS を稼動させました。 さらに Windows のクライアントマシンからは WinCvs を 利用して、クライアント・サーバ形式によるバージョン管理 システムを構築しました。

目次


はじめに

CVS は複数人で共同作業しながら開発を進める (例えば Linux の開発など)ような環境を強力に バックアップするツールです。CVS を使用することで 以下のようなことが可能になります。
  1. 個々のソースファイルの修正履歴(バージョン)を管理できる。
  2. 個々のソースファイルを任意のバージョンで復元できる。
  3. 作業中、または、任意のバージョン間で違いを比較できる。
  4. 複数人が同時共同作業する際に矛盾が生じないようにするための機能が備わっている。
CVS についての詳細は以下の URL を参照してください。
日本語の説明は、何らかの検索エンジンで CVS を探せば 色々とあります。

日本語の解説書も出ていますので 参考になると思います。
CVS―バージョン管理システム
[原書名:Open Source Development with CVS〈Fogel,Karl Franz〉]
ISBN:4274063720
352p 24×19cm
オーム社 (2000-05-25出版)
・Fogel,Karl【著】・でびあんぐる【監訳】・竹内 里佳【訳】
本体価:\3,800

最新版の入手とインストール方法

Linux 版 CVS
最新版はhttp://www.cyclic.com/ 等からダウンロードできます。cvs-x.yy.z.tar.gz (x.yy.z はバージョン番号) で圧縮されているので、それを適当なところ(例えば /usr/local/src/cvs/)に 置いてから解凍します。解凍後、cvs-x.yy.z という下位ディレクトリに移動します。 後はお決まりの
./configure
make
make install
でインストール完了です。
WinCvs(Windows 用)
WinCvs の最新版はhttp://www.wincvs.org/ からダウンロードできます。 インストールイメージは WinCvs106.zip を解凍した後で、例のごとく setup.exe を実行すれば、簡単にインストールできます。正常にインストール が終了すれば、直ぐに使用可能になります。 ただし、後で説明するように、日本語に対応するためソースを変更 したほうがよいので WinCvs106_src_app.zip と WinCvs106_src_shared.zip も ダウンロードして解凍しておいたほうがよいでしょう。

サーバの準備

インストールが終了したら稼動させるための準備です。 まず、CVS が全ての情報を管理するためのディレクトリ (リポジトリー)を作成します(ここでは /var/cvsroot と仮定します)。
cvs -d /var/cvsroot init
これで、/var/cvsroot が作成され、ファイルの実態や情報が格納されます。

次に、リモートクライアントが接続できるように設定します。

/var/cvsroot/CVSROOT/passwd を作成
個々の、リモートユーザのユーザ名とパスワードを書いた passwd ファイルを用意します。内容は、
winuser:xxxxx:cvsuser
のような形になります。ここで、winuser は CVS が 認識するためのユーザ名、xxxxx はエンコードされた パスワード、cvsuser は CVS が実際に実行されるときの 有効なログインユーザ名です。winuser は CVS が 認識するためのユーザ名ですので、実際のログインユーザ名 として登録されていない名前でもかまいません。 残念ながら、パスワード xxxxx を用意する 機能がありませんので、passwd コマンドなどで 一時的にパスワードを /etc/passwd に書き込んだ後で、 パスワード文字列をコピーする必要があります。
/etc/inetd.conf にエントリーを追加
リモートから CVS に接続要求があった場合、 CVS が自動起動できるように /etc/inetd.conf を修正します。
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs --allow-root=/var/cvsroot pserver
/etc/services にサービスポートを設定
CVS 用のサービスポート番号を /etc/services ファイルに設定します。 ここでは、デフォルトの 2401 をそのまま設定することにします。
cvspserver 	2401/tcp	# CVS

Windows クライアントの準備

Windows 上で、WinCvs とサーバが接続できるように パラメータ等を設定します。
WinCvs にパラメータを設定
まず、WinCvs を起動して「Cvs Admin」メニューから 「Preferences...」を選びます。「General」タブの 「Enter the CVSROOT」というテキストボックスに 以下のようにサーバとリポジトリの位置を指定します。
:pserver:winuser@cvs.yourserver.com:/var/cvsroot
ここで cvs.yourserver.com は CVS が稼動するサーバの アドレスです。
プログラムの修正
WinCvs は非常に便利ですが、 Diff を実行するとアプリケーションエラーになるという、 バグがあります。さらに、日本語が入っている テキストファイルをバイナリーファイルと判断してしまいます。 マイクロソフト VC++ 等の開発環境があれば、 以下のように修正できます。もっとも、そのまま利用しても 気をつければ大きな問題にはならないでしょう。 マイクロソフト VC++ で修正するには wincvs.dsw を オープンするだけで、関係する WinCvs.Exe や DLL が ビルドできます。試しに WinCvs 自体を CVS に登録して 以下のように修正してみてください。

cvs diff -r 1.1 recurse.c (in directory D:\WinCVS\cvs-1.10\src\)
Index: recurse.c
===================================================================
RCS file: /usr/local/cvsroot/WinCVS/cvs-1.10/src/recurse.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
163c163
<      if (strcmp (root, current_root) != 0)
---
>      if (root && strcmp (root, current_root) != 0)
この修正で cvs2ntlib.dll が作成されるので、 古い DLL と置き換えます。

cvs diff -r 1.1 TextBinary.cpp (in directory D:\WinCVS\common\)
Index: TextBinary.cpp
===================================================================
RCS file: /usr/local/cvsroot/WinCVS/common/TextBinary.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
137a138,150
> 
>   // Added by S.K for Shift JIS code case.
>   if(IsDBCSLeadByte(c)) {
>    ++i;
>    if(i < sBufSize) {
>     c = (unsigned char)*tmp++;
>     if( (c>=0x40 && c<=0x7E) || (c>=0x80 && c<=0xFC)) numTextChars += 2;
>     else                                              numBinChars  += 2;
>    } else {
>     numBinChars ++;
>    }
>   } else 
>   // End of Addition
同様に WinCvs.Exe が作成されるので置き換えてください。 この修正は、文字コードとして Shift JIS コードを 仮定しています。EUC コード等を使用する場合は、 別な修正が必要になります。文字コードを自動判定する ロジック等は
UnKanji や nkf("NKF"で検索すれば見つかります。)等を参照するのがよいでしょう。
以上、で WinCvs からサーバ上の CVS を利用できるようになります。 この例では、パスワードによる CVS へのログイン方法を紹介しました。 その他(SSH 等)の方法についてはマニュアルを参照してください。

WinCvs を使うための基本用語

WinCvs を用いればコマンドライン処理特有の 複雑なオプション指定は必要なくなります。従って、ずいぶんと処理は楽になります。 ただし、当然ながら「処理」を表す言葉は理解しなければなりません。 以下の言葉の意味がわかれば WinCvs を使いこなせる と思います。各言葉はマニュアル等で確認してください。
CVSROOT
import module
checkout module
commit
update
add
log
revision
tag
sticky tag
diff
branch

小林 茂雄 (E-Mail:<shigeo@tinyforest.gr.jp>)