CVS/Subversionを使ったバージョン管理(前編:バージョン管理の基礎)

 ソフトウェアを開発する際、ソースコードや各種リソースの管理に役立つのがバージョン管理システムだ。バージョン管理システムはソースコード管理システムなどとも呼ばれ、大規模な開発を行う際には必須と言っても過言ではない。また、大規模な開発だけでなく小規模な開発や個人による開発においても、ファイルの変更履歴の記録やバックアップといった用途に活用できる。

 本特集ではバージョン管理システムの基本的な考え方や用語を解説するとともに、オープンソースソフトウェア/フリーソフトウェア開発において多く利用されているバージョン管理システムである、SubversionおよびCVSを使ったバージョン管理方法について説明する。前編となる本記事では、まずバージョン管理システムの基本的な考え方と、用語について解説する。

バージョン管理システムのメリット

 バージョン管理システムとは、その名のとおりプログラムのソースコードや各種リソースを管理するためのシステムだ。代表的なものとしてはCVSやSubversion、Git、Mercurial、Visual SourceSafeなどがある。バージョン管理システムは以下のような機能を備えており、特に複数人/複数拠点間で連携してソフトウェア開発を行う際に有効である。

  • ディレクトリ構造によるファイルの保存
  • ファイルに加えられた変更履歴の保存/管理
  • 排他的編集を行うためのロック機構
  • 複数人が同時に同一のファイルに変更を加えた際の競合解決
  • ネットワーク経由でのアクセス
  • 差分による効率的なファイル転送

 なお、バージョン管理システムは中央集権型と分散型の2つに分けられる。中央集権型は1つのサーバーで変更履歴が管理され、そのサーバーに対して後述するチェックアウトやコミットといったアクセスを行うもので、代表的なものにCVSやSubversionがある。一方、分散型のバージョン管理システムではローカルで変更履歴が管理されるもので、代表的なものにGitやMercurialがある。本記事ではCVSおよびSubversionを例にバージョン管理システムの利用法を説明しているが、基本的な考え方はほかのバージョン管理システムでも同じである。

バージョン管理システムの仕組み

 バージョン管理システムを使用した開発では、(1)「リポジトリ」と呼ばれるファイルや管理情報などを保存する場所から作業用のディレクトリにファイルを取り出し、(2)取り出したファイルに修正を加え、(3)変更を加えたファイル(もしくは変更差分)をリポジトリに送信する、といったステップで開発作業を進めていく(図1)。

図1
図1 リポジトリとチェックアウト、コミット

 リポジトリから作業用ディレクトリにファイルを取り出す作業は「チェックアウト」と呼ばれ、また作業用ディレクトリに取り出したファイルは「ワーキングコピー」、もしくは「ローカルコピー」などと呼ばれる。また、ワーキングコピーに加えた変更点をリポジトリに保存する作業は「コミット」もしくは「チェックイン」などと呼ばれている。

 上記のようなリポジトリに対する操作は、専用のクライアントを介して行う。CVSの場合「cvs」、Subversionの場合「svn」という、コマンドラインで操作するクライアントが一般的だが、WindowsのエクスプローラからCVS/Subversionリポジトリにアクセスできる「TortoiseCVS」や「TortoiseSVN」というツールや、GUIのクライアントもある。

ここまでの用語まとめ
・リポジトリ
バージョン管理を行っているファイルや管理情報を保存する場所
・チェックアウト
リポジトリから編集・閲覧用にファイルを取り出す作業。cvs/svnでは「checkout」コマンドで行える
・ワーキングコピー、ローカルコピー
リポジトリから編集・閲覧用にチェックアウトしたファイルのこと
・コミット、チェックイン
ワーキングコピーに加えた変更をリポジトリに保存させる作業。cvs/svnでは「commit」コマンドで行える