RCS 初級講座

-- You always wanted to do this.

[RCS超入門] [RCS初級講座] [RCS中級講座] [RCSエラー対処] [RCS-SCCS対応表] [リンク集]

基本コマンド、cico だけでは まだ不便なはずです。 前のバージョンとの diff がとりたい、といった要求のためにも ちゃんと方法が提供されています。 ci/coの他に良く使うコマンドを三つ紹介しましょう。

$Id: rcs2.html,v 2.20 2016-07-02 11:14:26+09 kabe Exp $


▼rcsdiff: バージョン同士の diff をとる▼

% rcsdiff [diff-options] filename
最後にciしたバージョンと、 現在編集しているfilenameとの間で diff(1)をとります。

rcsdiff自身にもいくつかオプションはあるんですが、 ほとんどのオプションは diff に渡ります。 ですから、

	% rcsdiff -c filename	#context diff
	% rcsdiff -u filename	#unified diff
	
といったことができます。

% rcsdiff -r1.2 filename
-r1.2rcsdiffに対するオプションで、 バージョン番号1.2のものとfilenameとを比較します。 filenameは今そこに転がっているものが使われます。

% rcsdiff -r1.2 -r1.3 filename
バージョン1.2と1.3を比較します。この方法はfilenameが カレントディレクトリに存在しなくても使えます。 滅多に使いませんが…

▽rcsdiffの使用するdiff▽

…は、RCSの構築時に決まっています。PATHは見ません。 ですから、場合によっては/bin/diffを使うように設定されていて diff -u が使えない、といった事態がありえます。 diff -u はできるのにrcsdiff -u ができない、 といった場合は 管理者に 「"--with-diffutils"でRCSを作り直してくれ」と 言いましょう。


rlog : 変更履歴を見る▼

% rlog filename
ci の時に入力した注釈を新しい順に表示します。

その他にも最新バージョン番号、ロックがかかってるかどうか、 枝分かれしたバージョンの有無などが表示されます。

【rlogの出力例】

	% rlog index.html

	RCS file: RCS/index.html,v
	Working file: index.html
	head: 1.25				←最新版の番号
	branch:
	locks: strict
		kabe: 1.25			←ロックがかかっている
	access list:
	symbolic names:
	keyword substitution: kv
	total revisions: 25;	selected revisions: 25
	description:
	Welcome page of my homepage		←初回 ci 時の注釈
	----------------------------
	revision 1.25	locked by: kabe;
	date: 1996/12/05 07:52:09;  author: kabe;  state: Exp;  lines: +2 -2
	RCS超入門をvsdに移動。			←更新 ci 毎の注釈
	----------------------------
	revision 1.24
	date: 1996/11/28 14:37:16;  author: kabe;  state: Exp;  lines: +4 -7
	RCS超入門
	----------------------------
	......

表示の形式は(人にもよるでしょうが)あまり見やすくはないので、 適宜awkなどで加工すると良いでしょう。 (cf.rlog の出力範囲を指定する)


ident : ファイルから RCSマーカーを抽出する▼

% ident filename
filename から、"$Keyword: value$" となっている部分を捜し出して表示します。 バイナリファイルであっても捜し出してくれるので、 RCSのマニュアルの例にもある
static char *rcsid="$Id: ldd.c,v 4.1 1996-10-15 23:19:39+09 kabe Exp $";
といったものをソースに埋め込んでおけば、コンパイル後でも バージョンを確認することができます。

【ident実行例】

	% ident /usr/local/gnu/bin/mule
	/usr/local/gnu/bin/mule:
	     $Id: canna.c,v 1.35 1994/03/15 08:00:03 kon Exp $
	% 
	
おっと、OSに附属してくるバイナリなどは RCS ではなく SCCS で管理されている ことの方が多いので (除NEWS-OS)、 ident ではなく whatで調べてみましょう。

ほかの人にも使わせよう

履歴管理ツールは、 複数人がいじくるようなファイルで効果を発揮します。 ので、通常は いじらせたい人のグループを /etc/group なりに登録して

	% chgrp wwwadmin . RCS
	% chmod g+ws . RCS
カレントディレクトリは当然ですが、 RCSは管理ファイル (*,v) の書き換えを上書きではなく再生成で行うので、 RCS/ にもグループ書き権限が要ります。 カレントディレクトリに転がしておく作業ファイルは、どっちにしても通常は 読取専用 (-r--r--r--) になるので chmod g+ する必要はありません(ていうかしちゃダメ)。

RedHat系のLinuxはデフォルトが umask 002 なので chgrp だけでいいんですが、普通は umask 022 なので 明示的に書込権を与える必要があります。

これを忘れると、他の人は

しかないのでRCSで使ってもらえません。

システム設定ファイルなど、 rootで編集するものは一般権限は開けられないので、 運用でカバーします。

Webサーバー上でのRCS/ の保護

public_html/ 以下限定情報

一般に CGIスクリプトなんかは外部に見られないように 対策を講じるのですが、直接

丸見えになる ようでは目も当てられません。 対策を立てましょう。

サーバーが Apacheで、.htaccess が使えるのであれば、 deny してしまうのが一番単純。

	% echo "deny from all" > RCS/.htaccess

RedirectMatch が使えるのであれば

	% echo "RedirectMatch 404 ." > RCS/.htaccess
RCS/ の存在自体を隠せるのでおすすめ。 つまり、http://..../RCS/ を叩いても denied ではなく Not found になる。

もっとも、プロバイダな人で「見せるファイルだけアップロード」 という場合では あまり考える必要はありません。 直接 httpd の動いている機械で作業する人が対象です。

$Id$ があるぞ、気をつけろぉ(2)

$Id$ は常用するので わりと気をつけられますが、他にも置換される魔法の呪文はあります。 co(1) を参照。 特に変数参照に $ を使う perl や tcl では ci後に はまることがあるので 注意。

問.以下のプログラム部分の問題点を指摘し、正しく修正せよ。(10点)

リスト1.
...
	## output HTTP Header
	print "$Header: $Content\r\n";
...

かべ@sra-tohoku.co.jp