バージョン管理システムは,ソフトウエアを開発する際,複数の版(バージョン)の差分を記録し,修正内容や機能追加を復元,再修正するためのソフトウエアです。例えば,複数の機能を追加した後に,最初に取り入れた機能の不具合が見つかった場合,その部分のコードだけを除去するといった使い方ができます。開発者にとって大変便利な,そして複数人による開発では不可欠なソフトウエアです。

 バージョン管理システムを使うには,中央のサーバー(リポジトリ)に複数のソース・ファイルを登録し,必要な部分のみを手元のマシンにコピーします。編集を終えた後,リポジトリに戻すという流れを繰り返します。

 無償で利用できるバージョン管理システムとして最初に広く利用されたのが1980年台に開発された「RCS」(Revision Control System)です。RCSには既に安定版や実験版といった“ブランチ”を管理する機能が備わっており,ブランチ間でコードを管理できました。

 現在までに最も普及したバージョン管理システムは,1986年に公開された「CVS」(Concurrent Versions System)です。RCSではソース・ファイルを編集中にそのファイルをロックし,編集を禁じていました。一方,CVSではそのような場合も他の開発者が編集できます。たまたま同じ部分を編集してしまった場合は複数の編集結果を同一のソース・ファイルに埋め込み,エラーを報告する仕組みになっています。一見するとRCSのように編集を禁じた方が安全に見えますが,遠隔地の開発者が協力するオープンソース・プロジェクトでは,このような方針では編集の切り替えに要する手間が大きくなり,実用的ではありません。

 「Subversion」はCVSの欠点を修正したバージョン管理システムです。複数のファイルが関係する履歴管理機能,ソース・ファイルの名前を変更・移動した場合の管理機能,ネットワーク機能,などの改良が施されています。

 Subversionまでのバージョン管理システムは,中央のリポジトリにファイルの履歴を保存するため,ネットワークに接続していないとソース・ファイルを管理できません。そのため,現在では「svk」などの分散バージョン管理システムとSubversionなどを組み合わせる利用形態が広がっています。svkを使えば,ローカル・マシン上に全ソース・ファイルを含むリポジトリを保存し,オフライン時にも開発が続行できます。オンラインになったときに他のリポジトリと履歴を整合させて利用します。Linuxカーネルの開発にも分散バージョン管理システム「git」が使われています。