CVS ( Concurrent Versions System ) とは、複数の人が共同でファイル(ソースコード等)の編集作業を行う場合に、編集されたファイルのバージョンを管理するためのツールです。
CVS では、電子データであればソースコードでなくてもバージョン管理することが可能ですが、もともとはシステム開発のために開発されたツールです。
システムの開発中プログラムは絶えず進化をしています。ソースコードが出来上がれば動作させ、不具合があれば修正し、また動作させる、といった具合に開発中のプログラムは絶えず変化しています。ところが、場合によっては間違えた修正をしてしまったり、誤ってソースコードを修正したりと、前の状態にソースコードを戻したい場合があります。このような場合に備えて、ソースコードに変更がされるたびに元の状態との差分をバージョンとして履歴管理します。
バージョン管理を適切に行うことで、次のことが可能となります。
CVS では、リポジトリと呼ばれる「倉庫」にバージョンに関する情報を蓄積していくことで、バージョンの管理を可能とします。作業者はこのリポジトにソースコードなどのファイルを原本として登録し、修正の必要がある場合はリポジトリより原本のコピーを取り出して修正作業を行った後、原本に変更内容を反映すると言う具合です。
このようにしてリポジトリに反映された変更内容はバージョン情報としてリポジトリに蓄積され、過去のファイルの状態が自由に取り出せるようになります。
CVSでは、原本のコピーを作業者が取り出し、それぞれがそのコピーに対して編集作業を行うことで、同じファイルであっても複数の人が同時に変更を行えるようになっています。これは複数の人が同時に作業できることを意味していますが、注意が必要な部分でもあります。
仮に、同じファイルを同時に複数の人が変更した場合どうなるでしょうか?
「オカピくん」と「キリンさん」は同じファイルAをリポジトリよりチェックアウトして変更を行います。ファイルの編集が完了した2人は、それぞれリポジトリに反映しようとしますが、ここで問題が発生します。「オカピくん」の行った編集と「キリンさん」が行った編集のどちらを有効にすべきか?と言うことです。
このように複数の人が同じファイルを編集したことを衝突と言い、衝突が起きた場合の解決は話し合いで解決するといったアプローチをCVSでは取ります。
どうでしょうか、なんとなく CVS が判ってきたのではないでしょうか?
このようにバージョン管理を行うための CVS ですが、何に使えばいいのでしょうか?工夫次第でいろいろなことに使えると思いますが、筆者の場合次のことに使っています。
これが、もっとも一般的な使い方だと思いますが、システム開発においてソースコードの管理は CVS で行っています。もともとが、プログラム開発のために作られたツールですからとても役に立っています。今、話題のオープンソースの開発でもソースコードは CVS で管理されていることが一般的なんですよ。
皆さんが今見ているこの「Okapi Project Web Site」の HTML や画像ファイルなどのコンテンツは全て CVS で管理しています。Web サイトは随時新しいコンテンツを追加したり、内容を最新に更新したりします。そのときに過去変更を残しておけることは、バックアップとしても意味があります。