= 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
**関連リンク
この記事は役に立ちましたか?
- EnglishWorm.com
- SinglesFan.com
- LmLab.net
- サイトマップ
- 運営者について