![]() |
履歴管理システムCVS |
CVS(Concurrent Versions System)は、大量のソースやドキュメントファイルの変更を管理するバージョン管理ツールです。最近話題になるオープンソース開発でよく使用されています。複数人で共同作業をするのに適していますが、勿論個人で使うのも有効です。いろいろなOS上で動作します。UNIX, Windows95/NT, MacOS・・・。
CVSはもともとUNIX系で使用されていたので、UNIX用の入手は容易です。ここでは、Meadowで開発作業を行うので、Windows用のCVSについて話を進めます。
Cyclic Software社が開発、フリーで配布していましたが、現在はCVShomeサイトで配布されています。2003.1現在 1.11.5版が最新です(Security update)。次に紹介するWinCvsにもコマンドラインで実行可能なcvs.exeが含まれているので、Windows環境で使用する場合にコマンドライン版をインストールする必要性はそれほどないかもしれません。
GUI上でcvsの操作を行うことができるWinCVSがあります。CvsGui.orgサイトにて各プラットフォーム向けのGUI版cvsがリリースされており、この中にWinCVSも含まれています。2002.1現在安定版は1.2です。
なお、これは英語版ですので、漢字ファイル名を扱う点、ログに漢字コードを使用する点に問題があります。そこで、日本語環境で使用する場合はWinCVS1.2 Shift-JISごった煮版を使用します。次のファイルを入手します。
オリジナルのWinCvs1.2にShift-JIS knjwrp修正をしたものです。knjwrpについては、漢字コードについてを参照。
Cygwin1.1以上では、cvsパッケージが含まれています。勿論コマンドライン版です。Cygwin環境では、改行コードがUNIXスタイルになることや漢字コードへの対処等にいくつか問題があります。
zipアーカイブを解凍すると、cvs.exeというファイルが1つだけ得られます。これを環境変数PATHが通っているディレクトリにコピーします。以降、C:\bin フォルダの中にコピーしたとして話を進めます。cvsコマンドを実行するためには、このC:\binを環境変数PATHに追加します。
C:\>PATH=c:\bin;%PATH%
WinCvs 1.2 Shift-JISごった煮版のインストーラ(2002年2月27日版)を実行します。インストールするディレクトリは、コマンドライン環境でも実行しやすいように、ディレクトリ名の中に空白文字が含まれない場所を指定した方がよいと思いますデフォルトで構いません。C:\Program Files\Gnu\WinCVS1.2_JP
にインストールしたとします。
CVSでは管理下のデータ(ディレクトリツリー)をリポジトリとよぶ場所に保管する。「リポジトリの作成」と聞くと難しい印象を持つが要するに保管するディレクトリを指定することである。このディレクトリ内はCVSのツールが操作するため、決して直接いじらないように。
ここでは、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
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オプションで指定することもできる。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の動作を制御するには、リポジトリ管理用ファイルを通して行います。最初にチェックアウトし、修正後コミットします。
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ファイルを無視するように設定するには、
*.class |
とcvsignoreファイルを記述し、新規登録する。
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は標準でVC(版管理、バージョンコントロール)機能を有しており、RCS, CVS, SCCSの3つの版管理システムを呼び出すことができます。VC機能はメニューのTools→Version Controlから選択することができます。
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は差分として認識してしまいます。したがって、リポジトリ上では漢字コード(と改行コード)を統一しておく必要があります。
という方式が今のところ一般的かと思います。
で、これを実現する方法としては、
があります。
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以外にも構成管理ツールはいろいろあります。
Apache httpサーバのWebDAVと絡んでいるようだ。リポジトリはBerkeley DBを使用。
参考記事