rcs の簡単な使いかた

参考
man rcsintro
http://cgi3.tky.3web.ne.jp/~yutakakn/index.shtml
http://cgi3.tky.3web.ne.jp/~yutakakn/misc/linux/develop.html


前処理
rcs を使いたいディレクトリで、あらかじめ RCS(全て大文字)を作っておかないといけない。
~/work/hoge/ で作業をするとすると、
$ cd ~/work/hoge/
$ mkdir RCS
ってのをする事になるね。

で、~/work/hoge/hoge.c を新たに作り、
$ vi hoge.c

チェックイン
これに対してリビジョン管理を行うばあい、いっとー、始めにチェックインという操作をする。
$ ci hoge.c
> hoge.c,v <-- hoge.c
> enter description, terminated with single '.' or end of file:
> NOTE: This is NOT the log message!
> >> 2001.10.21
> >> first create.
> >> .
> initial revision: 1.1
> done

この操作でリビジョン 1.1 として記録された hoge.c,v というファイルが ~/work/rcs/RCS/ ディレクトリに作成され、hoge.c 自身は削除される。
   勝手に消されるってのは気分的にちょっと納得行かないな。
んで、 hoge.c に対するコメントの入力を促されるので適当に(後日自分が見て分かりやすい)説明を入れておく。どこを修正したかとかね。
コメントの終了はコロン'.'のみの入力で行う。

チェックアウト
チェックインしたままでは折角作ったファイルを見ることも出来ない。
見るだけなら(read-only 属性になるよ)
$ co hoge.c   ( Check Out の略ね )
で hoge.c が作成したディレクトリ ~/work/hoge/ に現れる。
ってか、rcs によって作られる。
ちなみに、co は引数を指定しなければ最新のリビジョンが取りだされる。

修正をかけたいなら
$ co -l hoge.c
-l は lock の意味で、hoge.c,v に対してロックを掛ける事で複数の人が同時に修正を入れてしまう事態を避けるのだ。
ま、これで書き込み属性の付いたファイルが作成されるので、がんがん修正を入れてしまおう。

で、修正を加えた hoge.c を rcs のリビジョンに管理させるのは、また、
$ ci hoge.c
を行うだけ。

ci と co -l を順次繰りかえすだけだね。

修正を加えている時に「あれ、おれどんな修正を入れたんだっけ?」
ってな事態になった時は
$ rcsdiff hoge.c
をしてみよう。
そのままのコマンドだけど、直前のリビジョンと目の前にある hoge.c との差分を表示してくれる。

チェックインをすませた後に差分を取りだしたい時は
$ rcsdiff -r1.1 -r1.2 hoge.c
この場合は、一番始めに作成したファイルと、その次に修正を入れたファイルとを比べる場合ね。
修正が何回も行われた後なら -r1.5 -1.1 なんてのも可能。

自分でリビジョンを覚えておかないといけないけどね。
まあ、RCS/ ディレクトリに入っているワークファイル(hoge.c,vの事)は
less でそのまま見れるから簡単に確認出来るけどね。

ログ監理
RCS/hoge.c,v に入っているコメント(ログ情報)を表示させるのは
$ rlog hoge.c
コメントしか表示されないから使い途がある様な無いようなコマンドだね。
やっぱり差分を表示してくれる rcsdiff の方が使い途は多いかな。

マーク
RCS で指定されている特殊な文字(マーク)をソース(今回はhoge.cの事ね)の中に
埋めこむと、co で取りだされたファイルの中にマークを展開した文字列が入る。
便利な人には便利な機能なのだろう。

マークの(だいたいの)種類
$Author$ リビジョンを登録したユーザのログイン名。
$Date$ リビジョンが登録された日時。
-zzone を指定した場合、数値によるタイムゾーンオフセットが追加される。
指定しない場合は、日時は UTC。
$Header$ 標準的なヘッダ。
RCS ファイルのフルパス名、リビジョン番号、日時、作者、状態、
ロック者(ロックされている場合)が含まれる。
-zzone を指定した場合、数値によるタイムゾーンオフセットが追加される。
指定しない場合は、日時は UTC。
$Id$ $Header$ とほぼ同様。
RCS ファイル名はパスをつけずに埋め込まれる。
$RCSfile$ パス名を含まない RCS ファイル名。
$Revision$ リビジョン番号。
$Source$ RCS ファイルのフルパス名。
$Locker$ リビジョンをロックしたユーザのログイン名
(ロックされていない場合は空)
$Log$ チェックイン時に与えたログメッセージ。
$Name$ 存在する場合、リビジョンをチェックアウトするために使用したシンボリック名。
例えば co -rJoe は $Name: Joe $ を 生成する。
単に co を指定した場合は、 $Name: $ となる。

もっと詳しい説明は
$ man co
を見るのじゃ。
いやになる程沢山あるから。

でも、まあ、使うとすれば $RCSfile$, $Id$, $Date$ くらいなものかな。



rcs の使い途として始めに考えていたのはバックアップ。
例えば、~/.bash_profile をバックアップするのにいちいち
.bash_profile.2001.10.21 ってなファイルネームにした
ものをつくっては、~/backup/jun1/ にコピーしている。
これを rcs を使えば楽になるかなって思っていた。
でも、RCS ディレクトリを作ったりしないといけないし、
どうもバックアップには向かない様に思えるから、やめた。

やるとすれば rpm の spec file を修正しなくちゃいけない時くらいかな。
思い付きで言っているけど。




戻る