普通に cvs import すると, デフォルトではイニシャルブランチ 1.1.1.1 ができて
しまうので,
- /tmp に空ディレクトリを作り, 一旦そこに cd して空のモジュールを作る
- そこ(あるいは別の場所)で cvs checkout module し, module/CVS を元の作業 ディレクトリに mv する
- 空ディレクトリを消す
- 元の作業ディレクトリで, cvs add *; cvs commit * する
という手順を(手で)順番にやっていた。こうすると普通にリビジョンが 1.1 から
始まるし, 必要なファイルだけ add できるのでムダがない。(聞いたところ,
こうして 1.1.1.1 を避けるのはそんなにレアというわけではないらしい)
毎回これを手でやるのは面倒なので, スクリプトを書いてみた。以下のような感じ。
#!/bin/sh -
#
# cvsinit -- cvs initial importer.
#
# $Header: /home/dmochiha/cvsroot/scripts/cvsinit,v 1.2 2004/09/06 06:17:54 dmochiha Exp $
if [ $# -lt 1 ]; then
echo "usage: cvsinit module [initial message]"
exit 0
fi
CVSMOD=$1
CVSMSG=${2:-"cvs start"}
CVSSTART=start
OLDPWD=`pwd`
trap 'rm -rf /tmp/.cvsinit-$$; exit 1' 2 3 9 15
(mkdir /tmp/.cvsinit-$$; \
cd /tmp/.cvsinit-$$; \
cvs import -m "$CVSMSG" $CVSMOD `whoami` $CVSSTART; \
cvs checkout $CVSMOD; \
mv $CVSMOD/CVS $OLDPWD \
)
rm -rf /tmp/.cvsinit-$$
"cvs start" とかベンダが `whoami` なのは自由なので, 適当に書き換えて下さい。
今いるディレクトリで cvsinit foo とやると, 空のモジュール foo ができて
今のディレクトリが CVS の管理下に入るので、そこで必要なファイルを適当に
cvs add; cvs commit すればよい。(実際には僕は
cvsadd () { cvs add $*; cvs commit $* } という関数を ~/.zshrc で定義しています。)
イニシャルブランチを使うのが気にならない人は別にいいのだけど, 1.1.1.1 が気に
なる人や, *.c や *.m など必要なファイルだけ管理したい人にはおすすめだと思う。
(Thanks for the help of F澤さん。)