cvs - バージョン管理システム

トップ > チップス > cvs - バージョン管理システム
2012-02-13, cvs

= cvs

共有リポジトリの作成

複数のユーザで利用するリポジトリを作る方法。リポジトリ保持専用のユーザ(とグループ)を作って、利用するユーザをそのグループに追加する。

# useradd cvsroot
# chmod 770 /home/cvsroot
# chmod g+s /home/cvsroot
# su - cvsroot
$ cvs -d /home/cvsroot/public init

利用するユーザの数だけ以下を実行。

:# usermod -G cvsroot username

***補足:スペシャルビットの設定

:$ chmod g+s /home/share

ディレクトリにset-group-ID(スペシャルビット)を設定すると、ファイルを作成した時点で所有グループを強制的にディレクトリの所有グループに変更することができる。 {link:http://www.inter-highschool.ne.jp/~s0201002/Linux_de_Go/58.html}

クライアントの環境設定

以下の2つの環境変数をシェルに追加しておくと便利。

:export CVS_RSH=ssh
:export CVSROOT=:ext:user@lumber-mill.info:/path/to/cvs

基本的なコマンド

update

チェックアウト済みファイルとリポジトリの同期をとる。

: cvs update

,C, 衝突発生(手作業によるマージが必要) ,G, ,U, リポジトリから取得したファイルに置き換え ,P, ,W, リポジトリに存在しないので削除 ,A, リポジトリに新規追加 ,M, 変更されたファイル ,R, 削除されたファイル

rオプションに続けて番号を指定すると、以前コミットした時の状態に戻ります。 :cvs update -r (リビジョン番号)

import

cvs import $project $vendor $version

export

exportコマンドはcheckoutの変形版で管理用ディレクトリ(CSV/)を除いた状態でソースをチェックアウトしてくれるというものです。

cvs export -r $tag $project

最新版を取り出したい場合は、以下のように指定することができます。

cvs export -D tomorrow $project

***checkout : cvs checkout $project

***commit : cvs commit

***add : cvs add [-kb] $file

***remove : cvs remove -f $file

***status : cvs status

***release : cvs release -d $project

**ブランチ(branches)の利用 安定版のソースコード群と開発版のソースコード群を分離するために用います。安定版では、重大なバグの修正だけをおこない、開発版では積極的な新機能の追加を行います。そのため、いずれ成長の止まる安定版をブランチ(枝)で、次々にコミットが繰り返される開発版をトランク(幹)で開発するのが一般的です。

>※Eclipse上では、トランクではなく「HEAD」と表記されます。

ブランチはいつかトランクにマージされる必要があります。通常、トランクの内容とかけ離れてしまわないうちに、トランクに変更を組み込み、ブランチを放棄します。

1.あるプログラムが、客先等で稼働できる段階まで進んでいると仮定します。 :package btest; : :public class A { : // 安定稼働中 :}

2.新しい機能の追加要求が来ました。この時点で、まず「stable_yyyyMMdd」ブランチを作成します。その後、トランク側に戻り、新しい機能の実装を開始します。 :package btest; : :public class A { : // 安定稼働中 : // 新機能を追加中.. :}

3.開始直後、「稼働中のプログラムに致命的なバグが発見された!」という(最悪だけど良くある)ケースを仮定します。トランク側では新機能の追加を開始したばかりで、当然まともに動作しません。ここで「stable_yyyyMMdd」ブランチに戻り、安定版のバグを修正し当座を凌ぎます(ブランチ側には新機能に関するコードがないので、トランクで頑張るよりは簡単に修正・再配備ができます)。 :package btest; : :public class A { : // 安定稼働中 : : // 致命的バグを修正 :}

4.トランク側の新機能が完成し安定した段階で、ブランチの役目は終わります。トランク側に戻り、ブランチのマージ作業を行います。この例の場合、コンフリクトが発生するので、手作業でコードを修正する必要があります。 :package btest; : :public class A { : // 安定稼働中 : // 新機能を追加 : // 致命的バグを修正 :}

無事にマージが完了したら、ブランチを削除します。

**レシピ ***リポジトリ引越し(文字コード変換)手順

タグを指定してエクスポート。 :cvs export -r $\{TAG\} $\{PROJECT\} JavaソースファイルのエンコードをShift_jisに変更する。 :find $\{PROJECT\}/ -name '*.java' -exec ./nkf2sjis.sh \{\} \\; 変換済みコードをリポジトリにインポート。 :cd $\{PROJECT\} :export CVSROOT=/home/cvsroot :cvs import $\{PROJECT\} lumberMill initial ※幾つかの特別な名前のフォルダやファイル(core,*.bak等)はインポート時に無視されます。その場合、当該フォルダを直接していしてインポートを行います。

指定ファイルのエンコードをShift_jisに変更するスクリプト。 :#! /bin/bash :nkf -s -O $1 && mv nkf.out $1

***インポート時に無視されるファイル >RCSLOG RCS SCCS CVS* cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* *.old *.bak *.orig *.rej .del-* *.a *.o *.Z *.elc *.ln core

***commitログをメールで配信する 以下の記述(実際は一行)をCVSROOT/loginfo末尾に追加する。 :DEFAULT (export LANG=C; echo ""; id; echo %\{sVv}; date; cat) | nkf -j | \\ : mail -s commit-log user@example.com

***サーバ(pserver)を起動する /etc/servicesにcvspserverを登録する。 :cvspserver 2401/tcp

/etc/xinetd.d/cvsを以下の内容で作成する。--allow-rootオプションにpserverでアクセスしたいリポジトリを全て記述します。 :service cvspserver :\{ : socket_type = stream : protocol = tcp : wait = no : user = root : passenv = : server = /usr/bin/cvs : server_args = --allow-root=/home/cvs/cvsroot \\ : --allow-root=/home/cvs/cvsmisc pserver :\}

(参考:inetdの場合) /etc/inetd.conf : :cvspserver stream tcp nowait root /usr/local/bin/cvs \\ : cvs --allow-root=/home/group/CVS pserver

次にCVSROOT中の以下のファイルを編集します。passwd及びreadersはCVSROOTのコミットでは追加することができません。直接サーバにログインして作成します。

CVSROOT/config :# システムユーザでのログインを無効化 :SystemAuth=no

CVSROOT/passwd(新規作成) :# ユーザ名:パスワード(暗号化済):システムユーザ名 :anoncvs::cvs

CVSROOT/readers(新規作成) :# 読み取り専用ユーザとして登録する :anoncvs

***サーバ(pserver)への接続方法 :% cvs -d :pserver:user@foo:port/home/group/cvs login :(Logging in to user@foo) :CVS password: : :% cvs -d :pserver:user@foo:port/home/group/cvs co test-cvs

***sshを介した接続 通常、環境変数「CVS_RSH」にsshを指定すればよいのですが、この方法では、sshにポート番号指定のようなオプションを設定することができません。そこで以下のように予めパラメタを与えた状態でsshが起動するようなスクリプトを作成し、パスの通ったディレクトリに置きます。 ~/bin/ssh22 :ssh -p 22 $*

そして以下のような環境変数を設定します。 ~/.bash_profile :export CVS_RSH=ssh22 :export CVSROOT=:ext:user@sample.com:/home/cvs/repos

**関連リンク

この記事は役に立ちましたか?