[RCS超入門] [RCS初級講座] [RCS中級講座] [RCS上級講座] [RCSエラー対処] [リンク集]
少しRCSを使い込んでくるようになると、ちょっと変わったことを したくなることもあります。さぁどうする?
$Id: rcs21.html,v 2.35 2003/12/14 17:58:37 kabe Exp $
% co -l httpd.conf RCS/httpd.conf,v --> httpd.conf co: RCS/httpd.conf,v: Revision 3.4 is already locked by otherone.
便利だ便利だと RCS の使用を布教していると、必ずや 他人がロックしたまま忘れているファイルを編集したくなることがあります。 その人にロックを解放してもらうのが正道ですが、 そうするほどでもなかったりめんどくさかったりする場合は ロックをこじ開けて(break a lock)編集することもできます。
メールを送りたくなければ rcs -M -lとしますが、 推奨はされてません(なぜだろう)。
昔いじったままで登録せず、しばらく放置していたファイルを 再度いじる場合なんかは、まず現状を登録したい場合がありますが、 単に ci -u とすると登録される更新時刻は「現在」になります。
ファイルの更新時刻で登録するには、
% ci -u -d filename
ファイルの更新時刻が信用ならんような場合は、 -d"1999-02-03 04:05:06+09" とすると更新時刻を偽造できます。 時刻の形式は co(1) 参照。
編集中に「やっぱりやめた」と思ったら co filename とすれば 元に戻せるんですが、ファイル自身の更新時刻(mtime)までは戻りません。 co を実行した時刻になります。 HTMLファイルなんかで更新時刻も戻したいような場合は
% co -M filenameで戻せます。
普通のwebサーバーではファイルの更新時刻を Last-Modified: として使用するので、キャッシュのことを考えると 変更がないのなら更新時刻も変えるべきではない。 (いや別に変えても害があるわけではないですが)
*.c でこれを行なうと make が発狂することがあるので避けましょう。
co でファイルを戻してもロックはかかったままなので、 手動で rcs -u file として解除するのも忘れないように。 (一人で使っていると気がつかない)
何も変更してないものを登録しようとしても、通常はとりあってくれません。
% ci -u forceci file is unchanged; reverting to previous revision 1.50
強制的に別のリビジョン番号を付けたい場合は、-fとします。
% ci -f forceci forceci,v <-- forceci new revision: 1.51; previous revision: 1.50 enter log message, terminated with single '.' or end of file: >>
ファイルのfile modeは、初回登録時に
RCS管理ファイル のfile modeとして記録されるので、
その後作業ファイルのパーミッションや実行属性
を変更してもco
した時点で戻されてしまいます。
従って、
実行属性などを変更したら管理ファイル の方も同時に変更
しましょう。
% co -l sample.pl sample.pl,v --> sample.pl revision 1.1 (locked) done % ls -l -rw-r--r-- 1 kabe 85 Dec 6 23:54 sample.pl -r--r--r-- 1 kabe 222 Dec 6 23:54 sample.pl,v % chmod +x sample.pl #実行属性だけを立てる % ls -l -rwxr-xr-x 1 kabe 85 Dec 6 23:54 sample.pl -r--r--r-- 1 kabe 222 Dec 6 23:54 sample.pl,v % ci -u sample.pl #登録する sample.pl,v <-- sample.pl file is unchanged; reverting to previous revision 1.1 done % ls -l -r--r--r-- 1 kabe 80 Dec 6 23:54 sample.pl #戻ってしまう -r--r--r-- 1 kabe 212 Dec 6 23:54 sample.pl,v %
履歴等はそのままでファイル名だけ変更する場合は、 RCS管理ファイル (,v) の名前を変更する だけ です。
% mv RCS/oldname,v RCS/newname,v(作業中の oldname も当然変わらないので変更しましょう)
RCS管理ファイルの中にはファイル名に関する情報は含まれてないんですねぇ。 ということは、rlogで出る履歴には ファイル名の変更に関する事実は残らない てことです。 残したければ 強制登録 で メモを入れておくこともできます。
なお CVS の場合はまた手順が違います。 RCS でのやり方をそのまま使うと CVS が発狂するのでやめましょう。 (古い名前を消してから新しい名前で再登録するらしい)
roff なマニュアルのページ末にある更新時刻
SunOS 5.6 Last change: 7 Jan 1997 1は、
.TH
マクロの第3引数で設定します。
てきとーでいいなら
.TH HOGECMD 1 "$Date: 2001-10-15 20:29:39+09 $"でも、文字数が多いせいもあって nroff ってみるとかなり不格好。
RCS自体に年月日だけというキーワードはないので、 roff自身に年月日部分だけを取り出させるのがスマートでしょう。 RCSのマニュアルページ (man/man1/rcs.1) も同じことをしています。
.de Id .ds Dt \\$4 .. .Id $Id: hogecmd.man,v 2.25 2001-10-15 20:29:39+09 kabe Exp $ .TH HOGECMD 1 \*(Dt
改版を大量にため込むと、 rlog の出力がえらい長くなって
% rlog /etc/mail/sendmail.cf |wc 1160 5574 48465やってられんという場合は…ふつーは less とかに通して見るんでしょうけど、 rlog にも出力範囲を指定するオプションがあるので活用してみよう。 (使いやすくはないが…)
rlog(1) のマニュアルにも他の例が出てますが、 複数のファイルを扱ってるんでなければ -L とかはあまり使わん ような気がする。 (複数ファイルなら CVS を使うべきだし…)