バージョン管理システム CVS

CVS(Concurrent Versions System) は多くのファイルから構成されるモジュールを複数の人間で管理するのに適したツールです。

バージョン管理システム
バージョン管理システム概念


バージョン管理の重要語

初めての方には聞きなれない言葉が多いので、簡単にまとめます。

【レポジトリ:Repository】
バージョン管理を行うファイルやバージョン制御の管理ファイルを格納する領域(ディレクトリ)
【バージョン】
ある時点でタグおよび名前を付けたファイルのセットを識別するために使用される連番方法
【リビジョン】
改版(バージョンとほぼ同意語)
【インポート】
リポジトリを作成する(最初)
【チェックアウト】
リポジトリの中身からリビジョン番号のファイル群を取り出す作業
【チェックイン】
作業ディレクトリを新しいバージョンとしてリポジトリにコピーします
【コミット】
チェックアウトして取り出したファイルを編集し、編集後に変更点を元のリポジトリに対して教える作業。チェックインと同じ
【競合】
同じファイルに 2 人の開発者が同時に変更を行ってリポジトリに変更をコミットする場合に発生
【マージ】
ソース リポジトリにある同じファイルの異なる作業用コピーに加えられた複数の変更を統合する作業

初期設定

リポジトリを使いはじめる最初だけ実行する内容です。

初期設定

まず、環境変数 CVSROOT と CVSEDITOR を設定しておいてください。

csh

% setenv CVSROOT リポジトリとするディレクトリ
% setenv CVSEDITOR エディタのフルパス

bash

% export CVSROOT=リポジトリとするディレクトリ
% export CVSEDITOR=エディタのフルパス

例)bashの場合

$ mkdir cvsroot
$ export CVSROOT=/home/hoge/cvsroot
$ export CVSEDITOR=vi

上記の例では、「/home/hoge/cvsroot」の下にCVSのレポジトリを作成しています。

※なお、Cygwinを利用する人は、[Devel]に含まれている「cvs」を追加しておいて下さい。

インストール画面
インストール画面

リポジトリの初期化

はじめにリポジトリを初期化します。これはそのリポジトリを使いはじめる最初だけ実行すればよいです。

% cvs init

新しいモジュールの登録(インポート)

まず、登録したいモジュール(ディレクトリとファイル一式)を、リポジトリにインポートします。

% cvs import ディレクトリ名 ベンダーID リリースID

「ベンダーID」はリビジョン 1.1.1 のタグ名となります。通常は自分の名前を指定すれば良いでしょう(省略不可、でも普通は使わない) 。

「リリースID」はリビジョン 1.1.1.1 のタグ名です。何でも構いません(省略不可、でも普通は使わない) 。

例えば「work」ディレクトリ内一式をリポジトリにインポートするには次のように行います。

hoge@computername ~/sample/work
$ ls
README  test1.c  test1.h
$ cvs import work hoge myproject_0_1

するとCVSEDITORでセットしたエディタが開くので、コメントを追加して保存して閉じます。

MyProject 1.1.1
CVS: ----------------------------------------------------------------------
CVS: Enter Log.  Lines beginning with `CVS:' are removed automatically
CVS:
CVS: ----------------------------------------------------------------------

登録が完了したら「work」ディレクトリ内一式は削除しても構いません。

作業手順

CSVを利用する場合、基本的な作業は次のようになります。

  1. 必要なバージョンのプロジェクトをチェックアウト
  2. ファイルを編集
  3. レポジトリに編集ファイルをコミット
  4. 競合が発生した場合は、マージ作業を行う
  5. コミット終了後、新しいバージョンのタグを付ける

チェックアウト(プロジェクトの取り出し)

通常、ファイルのコピーは次のように行います。

cp ~hoge/どこどこ/* .

CVSで管理されたプロジェクトを取り出すには、次のようなコマンドを入力します。

cvs checkout (プロジェクト名)
cvs checkout -d (作業用ディレクトリ) (プロジェクト名)

例)上の例では、プロジェクト名がworkなので、次のように入力します。

$ cvs co work

また、「タグ名」を指定して取り出すには次のように行います。

$ cvs co -r [タグ名] [ファイル名]

co は checkout の省略です。どちらでも構いません。

コミット(新しいバージョンとしてリポジトリにコピー)

% cvs ci (-r リビジョン番号:省略可)

ci は commit の略です。

プロジェクトを登録する前に、 ファイルの先頭にコメントを追加しておけば、自動的にコメントが追加されます。

/*
 * $Log:$
 */

$Log: $ という記号の部分に自動的にファイル名・バージョン番号・ 更新日時およびエディタで入力したコメントが追加されます。

$Revision:$ ... リビジョン
$Date:$ ... 最終コミットの日付
$Id:$ ... ファイル名、リビジョン、日付、作者

タグをつける

ci した後に、タグをつける

$ cvs tag [タグ名]

プロジェクトに対するファイルの追加

% cvs add [新しいファイル名]

バイナリファイルを add する場合は、-kb オプションを指定します。

$cvs add -kb [新しいファイル名] 

プロジェクトに対するファイルの削除

$ cvs remove [削除したいファイル名]
      delete

編集中のファイルが最新か確認する

$ cvs status

ファイルのログを確認する

$ cvs log

ファイルを最新状態に更新する

$ cvs update

モジュールの取り出し

CVS情報を含まないソースツリーを取り出す(チェックアウトではない)

% cvs export -r [リビジョン番号] [プロジェクト名]

タグを消す

$ cvs tag -d [タグ名]

ブランチさせる

CVSを用いてプロジェクト管理をしていると、「新な機能を追加したいけど完成するまでメインのリポジトリに反映したくない」と思うことがあります。

こういった問題に対する一つの解決策として、CVSの機能であるブランチを用いることができます。

ここでは紹介しません。


Valid XHTML 1.1! Valid CSS! 初版更新日 2005/06/16   最新更新日 2006/02/26