「バージョン管理システム」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
20行目: 20行目:
=== リポジトリ ===
=== リポジトリ ===
個人向けの[[Revision Control System|RCS]]などは作成したファイルを即座にリリースできるが、[[Concurrent Versions System|CVS]]、[[Subversion]]などの共同利用向けのシステムの場合、最初に「[[リポジトリ]]」と呼ばれるファイル管理向けのディレクトリを用意する。リポジトリの作成作業は基本的にシステム、またはプロジェクトの管理者が行い、作業者はそれに対してファイルをコミット(チェックイン)、チェックアウトする。
個人向けの[[Revision Control System|RCS]]などは作成したファイルを即座にリリースできるが、[[Concurrent Versions System|CVS]]、[[Subversion]]などの共同利用向けのシステムの場合、最初に「[[リポジトリ]]」と呼ばれるファイル管理向けのディレクトリを用意する。リポジトリの作成作業は基本的にシステム、またはプロジェクトの管理者が行い、作業者はそれに対してファイルをコミット(チェックイン)、チェックアウトする。

リポジトリが一カ所に集中しているシステムを単一リポジトリ、複数あるものを分散リポジトリという。
リポジトリが一カ所に集中しているシステムを単一リポジトリ、複数あるものを分散リポジトリという。

リポジトリが破損してファイルが復旧できなくなることがあり、リポジトリの定期的なバックアップは必須とされている。
リポジトリが破損してファイルが復旧できなくなることがあり、リポジトリの定期的なバックアップは必須とされている。



2010年6月13日 (日) 08:41時点における版

バージョン管理システム(バージョンかんりシステム)とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのシステム。特にソフトウェア開発においてソースコードの管理に用いられることが多い。

概要

バージョン管理システムの最も基本的な機能は、ファイルの作成日時、変更日時、変更点などの履歴を保管することである。これにより、何度も変更を加えたファイルであっても、過去の状態や変更内容を確認したり、変更前の状態を復元することが容易になる。更に、多くのバージョン管理システムでは、複数の人間がファイルの編集に関わる状況を想定している。商業的なソフトウェア開発やオープンソースプロジェクトなどでは、複数の人間が複数のファイルを各々編集するため、それぞれのファイルの最新の状態が分からなくなったり、同一ファイルに対する変更が競合するなどの問題が生じやすいが、バージョン管理システムは、このような問題を解決する仕組みを提供する。ただし、バージョン管理システムを個人のファイル管理に使用することも可能であるし、ソフトウェアのソースコードだけでなく、設定ファイルや原稿の管理などにも使うことも可能である。

管理方式

バージョン管理システムでは、ファイルの各バージョンをデータベースに保持しており、このデータベースを一般にリポジトリと呼ぶ。

バージョン管理システムの基本的な利用方法は以下の流れになる。

  1. ファイルをリポジトリに登録する。
  2. ファイルをリポジトリからローカル環境に取り出す(チェックアウト)
  3. ローカル環境で、ファイルに対し変更を行う。
  4. 変更したファイルをリポジトリに書き戻す(チェックイン)

ファイルがチェックインされると、システムによって「いつ」「誰が」「どんな変更を行った」等が記録され、後から参照できる。また必要に応じて古い版を取り出すことも出来る。

これらを行うユーザインタフェースは、CUIGUIなど様々である。また、統合開発環境を組み合わせて使用できるものもある。

リポジトリ

個人向けのRCSなどは作成したファイルを即座にリリースできるが、CVSSubversionなどの共同利用向けのシステムの場合、最初に「リポジトリ」と呼ばれるファイル管理向けのディレクトリを用意する。リポジトリの作成作業は基本的にシステム、またはプロジェクトの管理者が行い、作業者はそれに対してファイルをコミット(チェックイン)、チェックアウトする。

リポジトリが一カ所に集中しているシステムを単一リポジトリ、複数あるものを分散リポジトリという。

リポジトリが破損してファイルが復旧できなくなることがあり、リポジトリの定期的なバックアップは必須とされている。

チェックアウト

リポジトリからデータを取り出すことをチェックアウトと呼ぶ。

CVSSubversionではリポジトリから初めてデータを取り出しローカルに保存することをチェックアウトと呼ぶ。それ以降に再度、他の誰かによって更新されたリポジトリからデータを取り出してデータを最新版に保つことはチェックアウトとは呼ばず、アップデートと呼ぶ。

VSSでは、リポジトリからファイルを取り出すだけでなく、さらにそのファイルにロックをかけてチェックアウトした人がそのファイルをチェックインするまで他の人が編集できないようになることをチェックアウトと呼び、CVSやSubversionとはチェックアウトの定義が若干異なる。

ただし、VSSはソフトウェアのバージョンや設定次第でロックをかけないようにすることもできる。

リポジトリからチェックアウトした後は、しばらくの間にだれかがリポジトリに最新版のデータをコミット(チェックイン)している可能性があるので、コンフリクト、衝突を避けるためにチェックアウトしたデータでの作業を始める前やコミット(チェックイン)する前に、必ずローカルをアップデート(VSSではリフレッシュと呼ぶ)して常に最新版の状態に保つことが推奨されている。

チェックイン

リポジトリへファイルを書き込むことを、チェックインやコミットと呼ぶ。Visual Source Safeでは、リポジトリからファイルを取り出すだけでなく、さらにそのファイルにロックをかけてチェックアウトした人がそのファイルをチェックインするまで他の人が編集できないようにする。

ロック vs コピー、マージ

バージョン管理システムを通じてファイルを編集する場合、管理方法が、大きくわけて「ロック、ロック解除」と「コピー、マージ」の二種類ある。

「ロック、ロック解除」の方式は、ユーザーが編集するファイルに対してロックをかけ、他のユーザーからは編集できないようにして、編集後にファイルに対するロックを解除する仕組みである。この場合、ファイルの一貫性は保たれるが、ロックをしたままユーザーがそのファイルを置き去りにしてしまう危険性もある。そのため、グループでの利用よりも、個人によるファイル管理に適している。

「コピー、マージ」の方式は、ファイルを管理しているシステムから、ユーザーの元に、ロックをかけずにファイルをコピーし、編集後、そのファイルを管理システムに戻す際に、マージする方式である。この場合、特定個人がファイルを編集していても、他のユーザーが同時にファイルを編集でき、ファイルを管理システムに戻す際にシステム側で差分をマージしてくれる。もし、内容が競合する場合は、その旨をユーザーに知らせ、その時点で編集内容を確認、修正するのが一般的である。この方式はグループでの利用に向いている。

バージョン番号、タグ、ブランチ

バージョン管理システムを利用する場合、ファイルに対してバージョン(リビジョン)番号が付加される。RCSやCVSの場合、通常は1.1から始まり、ファイルの編集が行われる毎に最後の数値がインクリメントされる。その後は、何も指定せずにファイルをチェックアウトした場合、最新のファイルを取り出すことになるが、このバージョン番号を利用することによって、以前に編集したファイルを取り出すこともできるようになる。システムによっては、バージョン番号だけでなく、日付、時刻によってファイルをチェックアウトすることも可能になる。

タグとは、バージョン管理番号とは別に、ファイルに対して特定の名前を付与することである。特に、リポジトリ内のファイルに対して一括したタグをつける(よく「打つ」という)ことによって、特定のリポジトリの状態を簡単に取り出すことができるようになる。 ベータ版・リリース版・移植版など、プロジェクトの区切りがついた時点でタグをつけることがよく行われている。

ブランチは、リポジトリを分岐させることで、プロジェクトを分岐させ、複数の方向に開発を並行して進めることができる。大規模な開発プロジェクトで、「開発版」「安定版」とプロジェクトの方向性をわけたいときには有効である。バージョン管理システムの中には、複数の方向にわかれたブランチをまとめる機能をもつものもある。

ネットワークの利用

グループでバージョン管理システムを利用する場合、ネットワークの利用が必須となる。システムにより固有の方法があるが、大抵は、他の認証システムを利用してユーザーの認証を行ったり、通信経路を暗号化することで通信の安全性をはかることになる。通信は、sshを利用して安全性を確保するのが一般的である。

他に、匿名のシステムを用意しているものもある。インターネット上でプロジェクトを公開している場合に良く用いられ、これにより、開発途中のソースコードをプロジェクトに参加していない人たちに対しても公開している。

主なバージョン管理システム

フリーソフトウェア(無料・オープンソース)

プロプライエタリ

  • AccuRev
  • Alienbrain - デジタルアセットマネージメントシステム。バージョン管理機能に加え、構成管理、ステータス管理などの機能がある。任天堂にて使用され、有名になった。バイナリデータ、CGデータを問わず履歴を自動で保存できる。
  • BitKeeper - かつてLinuxカーネルの開発に使われ有名になった。
  • ClearCase
  • Code Co-op
  • Perforce - 集中型。ロック方式。Perforce Softwareが開発した。マージ機能もあり。
  • SCCS(Source Code Control System) - ソースコード管理システム。AT&Tが開発した、RCSに対応するプログラム。
  • SourceHaven
  • StarTeam
  • Visual SourceSafe - Microsoft Visual Studioとセットで使われることの多いバージョン管理システム。
  • Team Foundation Server - バージョン管理機能に加え、作業管理機能、タスク管理機能、自動ビルド、レポート生成の機能もある、Microsoftのソフトウェア開発プロジェクト管理サーバー製品。

関連項目