[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cvs-ml 444] Re:リポジトリを分割する方法



馬場@京大宇宙物理 です。

 Date: aki takada <aki@phoenixeng.co.jp>
 From: [cvs-ml 443] Re: リポジトリを分割する方法
 Subject: Fri, 25 Feb 2000 12:57:38 +0900

 > > 新しいリポジトリに、旧リポジトリへ import することですが、
 > > この他に、何かありますでしょうか。
 > 
 > 分割する以前の履歴に戻れなくてもいいなら、新しく import す
 > ればいいのですが、僕なら昔の履歴にも戻りたいので、今のリポ
 > ジトリのコピーを二つ作って、それぞれのリポジトリから不要な
 > 方のディレクトリ以下を cvs remove で CVS の管理対象から外し
 > ます。

かなーーーり、姑息な手段を使って良いなら、以下でもよいかも。
# というか、僕ならこうしますし、既に何度もしましたという例です。

  0. メンバー全員に、% cvs -nq update させて commit し忘れが
     ないか確認する。

  1. リポジトリを直接いじる。あらかじめ、
     Info の「ファイルの改名と移動」を良く読んでください。

     % cd /hoge/rep
     % mkdir tmp1 tmp2
     % mv A tmp1
     % mv B tmp2
     % tar cf - CVSROOT | (cd tmp1; tar xf -)
     % mv CVSROOT tmp2
     % mv tmp1 A
     % mv tmp2 B
     % chmod -R g+w A B

  2. inetd.conf で、--allow-root=/hoge/rep/A --allow-root=/hoge/rep/B
     のように列挙して SIGHUP.

  3. 設定ファイル変更。

     % cd /hoge/rep/A

     して、passwd,writers,readers など編集する。次に、

     % cvs -d :pserver:user@server:/hoge/rep/A login
     % cvs -d :pserver:user@server:/hoge/rep/A checkout CVSROOT
     % cvs -d :pserver:user@server:/hoge/rep/B login
     % cvs -d :pserver:user@server:/hoge/rep/B checkout CVSROOT

     して、必要に応じて、CVSROOT/modules とか loginfo なんかを
     修正 commit する。さらに、

     % cvs -d :pserver:user@server:/hoge/rep/A checkout A
     % cvs -d :pserver:user@server:/hoge/rep/B checkout B

     して、A/ChangeLog とかで、作業記録を取っておくとともに、
     ちゃんと懺悔しておく。:-)

  4. 問題ないことを確認したら、メンバーに新たに

     % cvs -d :pserver:user@server:/hoge/rep/A login
     % cvs -d :pserver:user@server:/hoge/rep/A checkout A
     % cvs -d :pserver:user@server:/hoge/rep/B login
     % cvs -d :pserver:user@server:/hoge/rep/B checkout B

     してもらうように通知する。


なお、1. では、必要に応じて、

     % chgrp -R projA A
     % chgrp -R projB B

してください。
また 4. で、危険を省みないメンバーは、

     A. cvs login するかわりに ~/.cvspass の当該行をホゲる。
     B. cvs checkout するかわりに、Info の「リポジトリの移動」を
        参考に CVS/Repository と CVS/Root の変更だけで済ませる。

という解もあるでしょう。僕は何度かやってみたことがあります。
まあ、あんまりおすすめしませんが。


 > サーバ/クライアントを pserver で運用してるのなら、サーバ
 > のCVS が面倒見れる $CVSROOT は普通ひとつだとか、どちらにも
 > 関わる作業者が $CVSROOT を切替えるのが面倒だとか、管理する
 > ならひとつのマシンにひとつのリポジトリの方が楽だとか、なの
 > でサーバ自体を分割するのでなければ、現行のままの方がいいか
 > な?とも思います。

「普通ひとつ」だと確かにわかりやすいですし一般的ですが、別にそうい
うケースばかりでもないとおもいます。僕の関わっているリポジトリサー
バでは、pserver で --allow-root を使って 10 個のリポジトリを使って
います。サーバマシン10台用意するなどしたくないですし。

CVS は、アクセス制限の概念がかなり貧弱で $CVSROOT/CVSROOT 以下の 
passwd,writers,readers くらいでしか制御できないですから、例えば以
下のような星取表のようなアクセス制限(というか分業体制?)をしたいと
すると、一つのリポジトリだけだと破綻しますよね。

		proj-A	proj-B	proj-C
  suzuki	○	○	○
  yamada	○	△	×
  kato		△	×	×

# ○は読み書き可、△は読み込みのみ可、×は読み書き不可とします。

こういう場合には普通は「紳士協定」でカバーするものでしょうし、リポ
ジトリで UNIX グループパーミッションをうまいこと工夫するという解も
あるでしょうが、それよりはリポジトリを分ける方が素直だとおもいます。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@kusastro.kyoto-u.ac.jp
京都大学理学部宇宙物理学教室 博士後期課程
--