バージョン管理システム 【VCS】 Version Control System
管理するファイルの内容をいつ誰がどのように変更したのか時系列で記録に残し、過去のある時点の内容を参照したり、現在の版を破棄してその時点の状態に戻したり、別の時点の版との違い(差分)を調べたりすることができる。
主に管理されるのはテキストファイルで、ソフトウェア開発においてコンピュータプログラムのソースコード(プログラミング言語で書かれたプログラム)を管理するのに用いられることが多い。仕様上は画像などバイナリファイルを含む任意の形式のファイルを登録できるようになっていることが多い。
リポジトリ
ファイルシステムと同じように複数のファイルを階層的なディレクトリに整理でき、全体をまとめてプロジェクトとして管理することもできる。ファイルとその変更履歴やバージョン番号(リビジョン)などの管理情報は「リポジトリ」(repository)と呼ばれる一種のデータベースにまとめて集積される。
利用者がクライアントソフトなどを用いてリポジトリからファイルを取り出す操作を「チェックアウト」、編集したファイルをリポジトリに書き戻す操作を「チェックイン」という。
リポジトリをインターネット上のサーバに設置すれば、互いに遠隔地にいる複数人で共同作業したり、広く一般に開発・編集への参加を募ることができる。オープンソースソフトウェアの多くはネット上にリポジトリを設置して内容を公開したり開発への参加を受け付けている。
リポジトリを利用者の手元に複製する方式の分散バージョン管理システムでは、利用者側に複製されたリポジトリを「ローカルリポジトリ」、プロジェクトを管理する大本のリポジトリを「中央リポジトリ「共有リポジトリ」「リモートリポジトリ」などと呼ぶ。
ブランチとマージ
ファイルやプロジェクトの変更履歴の流れをある時点を起点に分岐させ、派生版を作成することができる。分岐した時系列を「ブランチ」(branch)という。分岐したブランチを再び元の流れに統合(マージ)できるシステムもある。
開発中のソフトウェアからリリース用の版を分岐させて機能追加などを凍結して安定させたり、ある開発プロジェクトの内容を受け継いで別の目的のプロジェクトを立ち上げたりするのに用いられることが多い。
複数人での編集
バージョン管理システムの多くは複数人が一つのプロジェクトに参加することを想定して開発されており、同時並行で編集を行う際に一貫性を保つ仕組みが導入されていることが多い。
代表的な方式としては、編集時に他の人によるファイルの変更を禁止(ロック)し、編集終了時にロックを解除する方式と、各利用者の手元にファイルを複製してそれぞれ編集し、システムに変更内容を送信して反映(マージ)させる方式がある。前者を集中管理(集中型)、後者を分散管理(分散型)と呼ぶこともある。
主なシステム
著名なバージョン管理システムにはオープンソースソフトウェアとして公開されているものが多く、集中型の「CVS」(Concurrent Versions System)や「Subversion」(SVN)、分散型の「Mercurial」や「Git」などがよく知られている。米マイクロソフト(Microsoft)社の「Visual SourceSafe」(VSS)のような商用ソフトウェア製品もある。
近年では、簡単な利用者登録でインターネット上にリポジトリを設置して使用することができるホスティングサービスも広く普及しており、多くのオープンソースソフトウェアなどの公開リポジトリが最大手の「GitHub」で運営されている。