[CVS超入門] [RCSからの移行]
RCSで管理していたものを CVSに移行するためには、 基本的には CVSリポジトリに RCS管理ファイル (*,v) を 移し替えるだけで済みます。
実は $prefix/share/cvs/contrib/rcs-to-cvs という そのものずばりのスクリプトがあるので、そっち使えばいいぢゃん という話もあります (が境界処理は苦手のような気がする)
$Id: cvs_rcs.html,v 3.4 2004/03/24 21:18:57 kabe Exp $
要するに全ファイルが単一ディレクトリ直下に収まっていて、 ディレクトリをそれ以上掘ってない場合。 rcscleanが使えるので簡単です。
% rcsclean登録済のファイルはこれで消えます。 残っているファイルは、RCSに登録していないか、 ロックがかかっている(編集中の可能性がある)もの。 普通は ci file で始末します。 未登録ファイルをCVS作業領域でも未登録にしておきたいなら放置。 ロックされたものは、そのままでは面倒な手順が必要になるので ci で始末します。
% mkdir $CVSROOT/projectV % mv RCS/*,v $CVSROOT/projectV/直接 リポジトリの $CVSROOT/ 以下にディレクトリを掘ります。 CVSリポジトリに格納される管理ファイルは要するに RCS管理ファイルと同じなので、 基本的には既存の RCS/*,v を移し変えるだけです。
% cd .. % cvs checkout projectV(作業場のディレクトリ名とリポジトリ名が両方 projectV である場合)
% cd projectV % cvs -n update
? file
と出てくるものが
CVS未登録ファイルとなります。
未登録のまま残したいものだけ挙げられていればOK。
登録してないサブディレクトリなんかも?
表示なので注意。
もちろんなんやかんやで失敗する可能性もあるので、 作業場のバックアップは前もって tar なんかでいちおう取っておきましょう。
リポジトリ中の名前 (projectV) は極力バージョン番号がつかない
形式が良いのですが、
作業場のディレクトリ名が projectV-2.01/ のようにバージョン番号が
ついているときは
…ディレクトリ名を変更して作業すればいいだけなのですが、
それもヤという場合は
mkdir $CVSROOT/projectV/
を掘る
cvs checkout -d projectV-2.01 projectV
と、-d
で
展開ディレクトリ名を明示する
要は単ディレクトリでやったことを再帰的にやればよいのです
が mv 一発とかいうわけにはいきません。
シェルスクリプトの威力がありがたい。
mv で個々の *,v を移すのはややこしいので、
現在の作業領域を直接リポジトリ化する方法を使ってみます。
% cp -p projectV $CVSROOT/projectV % cd $CVSROOT/projectV
% find . -name RCS -a -type d | sh -c 'while read line; do mv ${line}/*,v ${line}/..; rmdir ${line}; done'消えていない RCS/ があれば ci で適当に始末します。
% find . -type d | sh -c 'OPWD=`pwd`; while read line; do cd $OPWD; cd $line; rcsclean; done'*,v でないファイルが残っていないか確認。
いずれにしても、cvs checkout で必要なファイルが全部出てきて コンパイル等が通るか確認します。
こういった、cvs import を使わずに作ったリポジトリには 「ベンダ枝」(1.1.1) はありません。 なくても不都合はない、はず。
CVS化した直後の状態にタグを 打っておきたいてのはあるでしょうから、 早速
% cvs tag CVS_IMPORTED (新しい作業領域内にて) % cvs rtag CVS_IMPORTED projectV (作業領域不要、直接リポジトリを操作)