バージョン管理システム
出典: フリー百科事典『ウィキペディア(Wikipedia)』
バージョン管理システムは、主にプログラムの開発において、ソースコードやその他のデータを管理するために用いられるシステムのこと。多数の人によって開発が行われる商業的なソフトウェア開発やオープンソースコミュニティにおいて一般的に使用される。
目次 |
[編集] バージョン管理システムの概要
バージョン管理システムの利用目的は多種多様である。個人でファイルを管理することもあれば、ネットワークを通じて大規模なプロジェクトにリリースすることもある。ソフトウェアのソースコードだけでなく、設定ファイルや原稿管理などにも使うことができる。
[編集] コミット(チェックイン)、チェックアウト、リポジトリ
バージョン管理システムを利用する際には、管理システムに対してファイルを預けたり、ファイルを取り出したりする。前者を「コミット」、「チェックイン」後者を「チェックアウト」と呼ぶ。個人向けのRCSなどは作成したファイルを即座にリリースできるが、CVS、Subversionなどの共同利用向けのシステムの場合、最初に「リポジトリ」と呼ばれるファイル管理向けのディレクトリを用意してから、そのリポジトリに対して作業を行うことになる。リポジトリの作成作業は基本的にシステム、またはプロジェクトの管理者が行い、作業者はそれに対してファイルをコミット(チェックイン)、チェックアウトする。
[編集] ロック vs コピー、マージ
バージョン管理システムを通じてファイルを編集する場合、管理方法が、大きくわけて「ロック、ロック解除」と「コピー、マージ」の二種類ある。
「ロック、ロック解除」の方式は、ユーザーが編集するファイルに対してロックをかけ、他のユーザーからは編集できないようにして、編集後にファイルに対するロックを解除する仕組みである。この場合、ファイルの一貫性は保たれるが、ロックをしたままユーザーがそのファイルを置き去りにしてしまう危険性もある。そのため、グループでの利用よりも、個人によるファイル管理に適している。
「コピー、マージ」の方式は、ファイルを管理しているシステムから、ユーザーの元に、ロックをかけずにファイルをコピーし、編集後、そのファイルを管理システムに戻す際に、マージする方式である。この場合、特定個人がファイルを編集していても、他のユーザーが同時にファイルを編集でき、ファイルを管理システムに戻す際にシステム側で差分をマージしてくれる。もし、内容が競合する場合は、その旨をユーザーに知らせ、その時点で編集内容を確認、修正するのが一般的である。この方式はグループでの利用に向いている。
[編集] バージョン番号、タグ、ブランチ
バージョン管理システムを利用する場合、ファイルに対してバージョン(リビジョン)番号が付加される。RCSやCVSの場合、通常は1.1から始まり、ファイルの編集が行われる毎に最後の数値がインクリメントされる。その後は、何も指定せずにファイルをチェックアウトした場合、最新のファイルを取り出すことになるが、このバージョン番号を利用することによって、以前に編集したファイルを取り出すこともできるようになる。システムによっては、バージョン番号だけでなく、日付、時刻によってファイルをチェックアウトすることも可能になる。
タグとは、バージョン管理番号とは別に、ファイルに対して特定の名前を付与することである。特に、リポジトリ内のファイルに対して一括したタグをつける(よく「打つ」という)ことによって、特定のリポジトリの状態を簡単に取り出すことができるようになる。 ベータ版・リリース版・移植版など、プロジェクトの区切りがついた時点でタグをつけることがよく行われている。
ブランチは、リポジトリを分岐させることで、プロジェクトを分岐させ、複数の方向に開発を並行して進めることができる。大規模な開発プロジェクトで、「開発版」「安定版」とプロジェクトの方向性をわけたいときには有効である。バージョン管理システムの中には、複数の方向にわかれたブランチをまとめる機能をもつものもある。
[編集] ネットワークの利用
グループでバージョン管理システムを利用する場合、ネットワークの利用が必須となる。システムにより固有の方法があるが、大抵は、他の認証システムを利用してユーザーの認証を行ったり、通信経路を暗号化することで通信の安全性をはかることになる。通信は、sshを利用して安全性を確保するのが一般的である。
他に、匿名のシステムを用意しているものもある。インターネット上でプロジェクトを公開している場合に良く用いられ、これにより、開発途中のソースコードをプロジェクトに参加していない人たちに対しても公開している。
[編集] 主なバージョン管理システム
[編集] フリーソフトウェア(無料・オープンソース)
- GNU arch - 分散型。C言語、シェルスクリプトで実装されている。
- Bazaar - 分散型。Pythonで実装されている。
- CVS - 集中型。C言語で実装されている。
- GNU CSSC - SCCSのクローン。もうほとんど使われることはない。
- Darcs - 分散型。Haskellで実装されている。
- git - 分散型。Linuxのコード管理のために作られた。C言語、シェルスクリプトで実装されている。
- Mercurial - 分散型。Pythonで実装されている。
- Monotone - 分散型。C++で実装されている。
- Subversion - 集中型。CVSの改良版という位置づけ。C言語で実装されている。
[編集] プロプライエタリ
- AccuRev
- BitKeeper - かつてLinuxカーネルの開発に使われ有名になった。
- ClearCase
- Code Co-op
- Perforce - 集中型。ロック方式。Perforce Softwareが開発した。マージ機能もあり。
- SCCS(Source Code Control System) - ソースコード管理システム。AT&Tが開発した、RCSに対応するプログラム。
- SourceHaven
- StarTeam
- Visual SourceSafe - Microsoft Visual Studioとセットで使われることの多いバージョン管理システム。