[Meadowで開発へ戻る]

履歴管理システムCVS

CVS(Concurrent Versions System)は、大量のソースやドキュメントファイルの変更を管理するバージョン管理ツールです。最近話題になるオープンソース開発でよく使用されています。複数人で共同作業をするのに適していますが、勿論個人で使うのも有効です。いろいろなOS上で動作します。UNIX, Windows95/NT, MacOS・・・。


入手

CVSはもともとUNIX系で使用されていたので、UNIX用の入手は容易です。ここでは、Meadowで開発作業を行うので、Windows用のCVSについて話を進めます。

コマンドライン版CVSの入手

Cyclic Software社が開発、フリーで配布していましたが、現在はCVShomeサイトで配布されています。2003.1現在 1.11.5版が最新です(Security update)。次に紹介するWinCvsにもコマンドラインで実行可能なcvs.exeが含まれているので、Windows環境で使用する場合にコマンドライン版をインストールする必要性はそれほどないかもしれません。

WinCVSの入手

GUI上でcvsの操作を行うことができるWinCVSがあります。CvsGui.orgサイトにて各プラットフォーム向けのGUI版cvsがリリースされており、この中にWinCVSも含まれています。2002.1現在安定版は1.2です。

なお、これは英語版ですので、漢字ファイル名を扱う点、ログに漢字コードを使用する点に問題があります。そこで、日本語環境で使用する場合はWinCVS1.2 Shift-JISごった煮版を使用します。次のファイルを入手します。

オリジナルのWinCvs1.2にShift-JIS knjwrp修正をしたものです。knjwrpについては、漢字コードについてを参照。

CygwinのCVS

Cygwin1.1以上では、cvsパッケージが含まれています。勿論コマンドライン版です。Cygwin環境では、改行コードがUNIXスタイルになることや漢字コードへの対処等にいくつか問題があります。


インストール

コマンドライン版CVS 1.11のインストール

zipアーカイブを解凍すると、cvs.exeというファイルが1つだけ得られます。これを環境変数PATHが通っているディレクトリにコピーします。以降、C:\bin フォルダの中にコピーしたとして話を進めます。cvsコマンドを実行するためには、このC:\binを環境変数PATHに追加します。

 C:\>PATH=c:\bin;%PATH%

WinCVSのインストール

WinCvs 1.2 Shift-JISごった煮版のインストーラ(2002年2月27日版)を実行します。インストールするディレクトリは、コマンドライン環境でも実行しやすいように、ディレクトリ名の中に空白文字が含まれない場所を指定した方がよいと思いますデフォルトで構いません。C:\Program Files\Gnu\WinCVS1.2_JP にインストールしたとします。


CVS設定(コマンドライン版)

リポジトリの作成

CVSでは管理下のデータ(ディレクトリツリー)をリポジトリとよぶ場所に保管する。「リポジトリの作成」と聞くと難しい印象を持つが要するに保管するディレクトリを指定することである。このディレクトリ内はCVSのツールが操作するため、決して直接いじらないように。

1.リポジトリに指定するディレクトリの作成

ここでは、E:\home\cvs-master をリポジトリに指定する。

   E:\home> mkdir cvs-master

cvs-1.10-winでは、ネットワーク上の共有フォルダをリポジトリに指定することもできる。複数人で共同作業するとき等では、ネットワーク上でリポジトリを共有すると便利です。たとえば、NetBIOS名 luna の共有フォルダ data 内にリポジトリcvs-masterを作成する場合は

   E:\home> mkdir \\luna\data\cvs-master

2.リポジトリのディレクトリを環境変数CVSROOTに設定する

E:\home\cvs-masterを設定する場合は、ローカル(実行しているマシン)の資源を使うので

   E:\home\torutk> set CVSROOT=:local:c:\home\cvs-master

ネットワーク上の\\luna\data\cvs-master を設定する場合は、

   C:\home\torutk> set CVSROOT=\\luna\data\cvs-master

のようにする。CVSはもともとネットワーク対応なので、ローカルのディレクトリを使うときは明示的にローカルであることを":local:"を付け加えて指定する。

環境変数CVSROOTを設定しなくても、cvs -d リポジトリへのパス コマンド ・・・ とcvsの-dオプションで指定することもできる。

3.CVSコマンドでinitを実行する

   C:\home\torutk> cvs init

リポジトリにプロジェクト(ディレクトリツリー)を新規登録

CVSは、一つのリポジトリ内に複数のプロジェクトを管理することができる。リポジトリに登録したいファイル/ディレクトリのある場所へcdし、cvsコマンドのimportを実行する。エディタ(デフォルトはメモ帳)が起動し、プロジェクトのログメッセージを記入し終了すると、登録処理が開始する。

   C:\home\torutk> cd develop\project-w
   C:\home\torutk\develop\project-w> cvs import torutk/project-w torutk initial

torutk/project-wは、CVSROOTの下に生成するディレクトリ。異なるプロジェクトで同じディレクトリを指定しないように注意する必要がある。
torutkは、ベンダータグ。開発元を示す。
initialは、リリースタグ。リリース番号やリリース名を指定する。

テンポラリファイル(*~, *.oなど)は登録されず無視される。

CVSの動作制御

CVSの動作を制御するには、リポジトリ管理用ファイルを通して行います。最初にチェックアウトし、修正後コミットします。

CVSリポジトリ管理用ファイルのチェックアウト

    C:\home\torutk\cvsadmin> cvs checkout CVSROOT
    C:\home\torutk\cvsadmin> dir CVSROOT
    [.]            [..]           checkoutlist   commitinfo     config
    [CVS]          cvswrappers    editinfo       loginfo        modules
    notify         rcsinfo        taginfo        verifymsg

特定のファイルを無視する

更新、インポート、リリースを行うときに特定のファイルを無視するときは、cvsignoreファイルに記述する。上記ではデフォルトではcvsignoreファイルはないようなので、新規に作成し、追加・コミットする。たとえば、*.classファイルを無視するように設定するには、

cvsignoreファイル
*.class                    

とcvsignoreファイルを記述し、新規登録する。


CVS操作(コマンドライン版)

リポジトリから最新のプロジェクトを取得する

CVSの管理しているディレクトリツリーをどこかワークディレクトリに展開する。

   C:\home\torutk> mkdir work
   C:\home\torutk> cd work
   C:\home\torutk\work> cvs checkout torutk/project-w

すると、workの下にどどっとディレクトリツリーが展開されていきます。このとき、CVSROOTの下に生成されたディレクトリも掘られるため、次のようなディレクトリ構造になります。

  C:\home\torutk\work\torutk\project-w\...

ちょっとtorutk\project と余計なディレクトリができてしまいます。直接workの下に展開したい場合は、

   C:\home\torutk\work> cvs checkout -d . torutk/project-w

のように、checkoutの-dオプションで展開する場所を指定します。

修正したファイルをリポジトリに対して更新する

変更したファイルに対してcvsコマンドのcommitを実行する。例えばファイルFoo.javaを更新する時は、

   C:\home\torutk\work\src\foo> cvs commit Foo.java

とコマンドを実行する。すると、エディタ(デフォルトではメモ帳)が起動される。このエディタ上で修正内容などの更新情報を文章で記述し、エディタを終了させる。エディタが終了すると、cvsが新しいファイル内容をリポジトリに加える。

ファイルを新たにリポジトリに対して追加する

新しいファイルを作成したときは、cvsコマンドのaddを実行する。例えばファイルNewer.javaを新規作成した時は、

   C:\home\torutk\work\src\foo> cvs add Newer.java

とコマンドを実行する。すると、このファイルをcvsに登録する作業が予定される。実際にリポジトリに反映するには、commitをしなくてはならない。

現在の状態にリリースタグを付ける

現在の状態を一まとまりにして、後日取り出したいときは、あらかじめリリースタグを付与します。複数ファイルがそれぞれバラバラなリビジョン番号を持っている(通常はこうなる)とき、後でそれぞれのファイルのリビジョン番号を指定して現時点のものを取り出すのは非常に困難です。そのような場合、今の各ファイルの状態をまとめて関連づけるためにリリースタグを付けます。例えば、リリースタグとして"Release-1_0"を付ける場合、

   C:\home\torutk\work\src\foo> cvs tag Release-1_0

とコマンドを実行します。

この後、このリポジトリがどんどん更新されていきますが、現在の状態をいつでも再現することができます。

   C:\home\torutk\work\src> cvs checkout -d foo -r Release-1_0 torutk/project-w/src/foo

Meadow上からcvs操作

 Meadowは標準でVC(版管理、バージョンコントロール)機能を有しており、RCS, CVS, SCCSの3つの版管理システムを呼び出すことができます。VC機能はメニューのTools→Version Controlから選択することができます。

VCモード行表示

 CVS管理下のファイルをMeadowで開くと、モード行に例えばCVS:1.22のようにCVSが使われていること、現在のレビジョンが1.22であることを表示します。

修正したファイルをリポジトリに更新

 ファイル修正後、C-x v vを実行する(メニューのTools→Version Control→Check In/Outを選択する)と、*VC-log*という名の新しいバッファが現れます。このバッファ上で更新情報を記述し、C-c C-cを実行すると、変更内容がリポジトリに反映されます。

ディレクトリ(モジュール)の更新状況を見る

 あるディレクトリの更新状況を見るには、C-x v dを実行(メニューのTools→Version Control→VC Directory Listingを選択)します。ミニバッファにディレクトリ名を聞いてくるので、見たいディレクトリ名を入力します。ファイル名の行にカーソルを置いて、差分を見たり(C-x v =)、リポジトリを更新したり(C-x v v)する操作を実行することができます。

編集中のファイルとリポジトリ内の最終版のファイルとの差分を見る

 C-x v =を実行(メニューのTools→Version Control→Compare with Last Versionを選択)すると、バッファが1つ開いて差分が表示されます。


漢字コードについて

Windowsでは、漢字コードSJISが、UNIX系ではEUCが使われることが多い。WindowsとUNIXとでCVSのリポジトリでファイルを共有管理するにはどうしたらよいのでしょうか?漢字コードの違いをCVSは認識しないので、漢字コードが違うだけで内容が一緒のファイルでもCVSは差分として認識してしまいます。したがって、リポジトリ上では漢字コード(と改行コード)を統一しておく必要があります。

という方式が今のところ一般的かと思います。

で、これを実現する方法としては、

  1. CVSをクライアント・サーバで使用し、knjwrpパッチを当てたCVSを使う。CVSサーバ側でファイルの出入りの際に漢字変換を行うフィルタをかける。
  2. CVSクライアント側で、漢字コード変換をしてしまう。

があります。

knjwrp

CVSサーバのcvswrappersに漢字変換フィルタをかますものです。オリジナルのCVSでは機能しないため、CVSにknjwrpパッチを当てる必要があります。knjwrpパッチは、サーバ側だけでなくクライアント側のCVSにも当てる必要があります。(WinCVSごった煮版はknjwrp適用済み)

クライアントで変換

サーバ側で漢字変換を行うknjwrpに対して別の考え方としてクライアント側で漢字変換を行うものです。WinCVS用のパッチが公開されています。

WinCvs 1.2 Shift-JISごった煮用euc/sjis相互変換パッチ(2002年8月27日版)をテンポラリ作業領域に解凍します。その中にあるcvs.exe, cvs2ntlib.dllの2つのファイルを、WinCVSごった煮版をインストールした場所にあるものと置き換えます。


CVSの欠点

よりよい構成管理ツールへ

CVS以外にも構成管理ツールはいろいろあります。

  1. subversion ( Apache License)
    http://subversion.tigris.org/
  2. aegis (GPL)
    http://aegis.sourceforge.net/
  3. prcs (GPL)
    http://prcs.sourceforge.net/
  4. bitkeeper ( 商用製品だが、フリーソフト開発に使用する場合は無償)
    http://www.bitkeeper.com/

Subversion

Apache httpサーバのWebDAVと絡んでいるようだ。リポジトリはBerkeley DBを使用。

参考記事


[目次へ戻る]