RCS が出すエラー類はそんな多くないですが。 (CVSは多そうだ…)
$Id: rcs_e.html,v 1.16 2003-01-27 08:35:13+09 kabe Exp $
% co -l rcs21.html RCS/rcs21.html,v --> rcs21.html revision 2.24 (locked) writable rcs21.html exists; remove it? [ny](n):
書き込み可能 (-rw-
)なファイルがあるということは、
編集中でまだ登録していないものの可能性があるわけで、
本当に上書きしていいかどうか聞いてくるわけです。
一番ありがちなのは、前回の編集を登録せずにほったらかしにしていた場合。 上書きはまずいわけで、n (Ctrl-Cや単なる[CR]でもよい) で抜けて 現状を登録します。
writable rcs21.html exists; remove it? [ny](n): n co: checkout aborted % ci -l -d -M rcs21.html #再ロック、mtime拾う、mtime保持
現在の編集を放棄して元からやり直すなら、上書きしてかまわないので yと答えて登録済のものを取り出す。
writable rcs21.html exists; remove it? [ny](n): y done
co -l ではロックは かかったままなので、 今回編集するのは やめて 元に戻す(ロック解除)なら 素直に co -u で取り出した方がいいでしょう。
% co -u rcs21.html RCS/rcs21.html,v --> rcs21.html revision 2.24 (unlocked) writable rcs21.html exists; remove it? [ny](n): y done
% ci -u rcs.html RCS/rcs.html,v <-- rcs.html ci: RCS/rcs.html,v: no lock set by myself登録は 自分用にロックしてある枝・幹に対してだけ可能ですが、 そのロックがないということ。 現在かかっているロックは rlog -l file で一覧が出ます。
% rcs -l rcs.html
とにかく登録だけしておきたいなら、 新しい枝を生やすという方法もあり。 新しい枝 (X.X.X.1) は事前のロックは不要。
ロック時には myname でロックされているのだが、 登録時には RCS に root だと 認識された場合とか。 上と同じく素直にロックを強制解除するか、 環境をロック時と揃えます (setenv LOGNAME myname とか…)
人間ならともかく、 USER="root" のままで起動した httpd を nobody で動かしてて、CGIから自動 ci なんかをしようとするときに はまる ことがあります。 (USERが優先されるので rootと誤認される)
% ci -u1.2.1 rcs.html
% ci public_html public_html,v <-- public_html ci: `public_html' is not a regular file ci: public_html: Invalid argument
RCSは ファイル単位での管理 しか できないので、ディレクトリまるごと登録というのはできません。
CVSにステップアップしましょう。 (覚えなきゃならんことが飛躍的に増えますが)
まあ「どーしても」ってんなら public_html/* とか find . -type f -exec ci {} \; なんてのもありますが…
% co -l file file,v --> file revision 1.2 (locked) co: file,v: warning: You now have 2 locks.
同一ファイルに対し、同一人物が2つ以上のロックをかけると 注意書が出ます。というのも、 次回登録時に
% ci -u file file,v <-- file ci: file,v: multiple revisions locked by you; please specify oneどっちのロックに対して登録すべきか判断できなくなるから。
$Id$ みりゃわかるだろと思うかもしれませんが、 ファイル中に $Id$ が必須なわけではないせいか、 ci は そこまでめんどう見てくれません。 (CVSでは sticky tag でこの管理を行っている。 ためかCVS管理下のファイルには $Id$ さえ ついてないことが多い)
複数ロックがしたいという場合もありますから、 警告にびびる必要はないし、登録時には -u1.1.2 などと 枝(版番)を明示すればよい。
ただ、複数ロックで複数の版を同時に編集中というのは、
CVS ならともかく RCS では めったにやらない
(できるけど作業ファイルを分けねばならんので
めんどくさい)
ので、
前回別の枝をロックして編集したままほったらかしにしていた
という状況の方が多いでしょう。
登録するなりして掃除するのがおすすめ。
現在のロック一覧は rlog -l
% co -u -d fairu.html fairu.html,v --> fairu.html co: fairu.html,v: Revision 7.79 has date 2002-03-07 15:07:44+09.
裸の -d を使うと稀に出ます。大抵 ci -u -d (登録、残す、更新時刻拾う)の 打ちまちがいなので、やり直せばいいんですが。
ま、でも原因は一応追及しときましょう。
-d オプションは、普通は -d日付 (-d'2002/03/04 05:06:07') の 形で使い、裸の -d は 登録時(ci)に「ファイルの更新時刻を拾う」場合のみ、です。 だから、裸の co -d てのは使いません。
まず -u によって、現在ロックがかかっている版番が内部で補完されます。 よって -r7.79 -u。
で、co -d日付 は「この時刻以前のものを取り出せ」の意味ですが、 日付 がないと 今日の 00:00:00 になります。 (たぶんこれバグだと思うんだが…) 00:00:00 は -zタイムゾーン で計られるので、通常は GMTですが -zLTとしている人はローカルの00:00:00 です。
よって、上の例は以下と同等。
% co -r7.79 -u -d'00:00:00' fairu.html「00:00:00 以前のものを取り出せ」ということになりますが、 7.79版の登録時刻は 15:07:44 と、00:00:00 以降になっているため、 これは変だとエラーが出るようになるわけです。 (エラーメッセージは事実しか述べてないので、何で問題なのかが全然わからん)
このテの矛盾検知エラーは他にも以下のようなのがあります。 身に覚えがないなら、rcsが内部で補完している各種データを疑ってみましょう。 (どうやって確認するんだよう)
% co -d'2002-12-01<' sendmail.cf sendmail.cf,v --> sendmail.cf co: sendmail.cf,v: No revision on branch 9 has a date before 2002-12-01 00:00:00+09.
まこの場合はわかりやすいエラーが出るんですが、
RCSが内部でやっている自動検索は枝をまたがない (またいだら普通困る)ので、 たまに幹の整数部 (1.x → ... → 9.x) を変えていたりすると、 違う枝だと認識されて探してくれません。 -r7 とか明示する必要がある。めんどくさい。
% ci -u newfile RCS/newfile,v <-- newfile enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> _
ファイルを初めてRCS管理下に入れる時に出ます。 正確にはエラーでもなんでもないですが、 "!" がついてるから初心者はびびるだろうな〜
修正後に ci していくと
new revision: 1.7; previous revision: 1.6 enter log message, terminated with single '.' or end of file: >> _と、「(更新)ログを入れろ」になるので、それではないよと言っているわけ。 (そんなこと初心者に言ってもわからんだろーが…)
初めて ci する際に聞かれるのは、「何を変更したか」ではなく (初めてなんだから変更なんてものはない)、 「そのファイルは何なのか」(enter description)です。 機械が読むわけではないので、てきとーに入れておけばよいでしょう。
CVSwebなんかはここの文を説明書きとして ばばばんと出したりするので、そういう使い方をするなら ある程度かっちょいい説明文にしたほうがいいと思いますが
この「何なのか」説明文は、見づらいですが rlog の description: 項に 残ります。
% rlog -t rcs_e.html RCS file: RCS/rcs_e.html,v ... description: Encounter to RCS errors ←これ =============================================修正したければ rcs -t で修正します。 めったに変えるもんでもないと思いますが
% ci -u -d'1999-01-01 00:00:00' pastfile pastfile,v <-- pastfile ci: pastfile,v: Date 1999-01-01 00:00:00+09 precedes 2002-12-08 01:28:38+09 in revision 1.1.
版番が増えるときは必ず更新時刻もすすむように 制限されています。 枝生やしたり -f 使っても無駄無駄無駄。
最新版を登録後、参考のために旧版も入手して 登録しておこうとすると この制限に困ったりするんですが、 回避方法はありません。
ま直接管理ファイル (*,v) の date^Ixxxx.xx.xx.xx.xx.xx; 部分をいじくれば 変更できんこともないですが、 超おすすめしません。 版番と更新時刻が逆転していると co -d'date' (この時刻以前のものを取り出す) も ちゃんと?動作しなくなります。あまり使わんけど。