スポンサーリンク

RCSINTRO

名称
解説
作者
関連項目

名称

rcsintro − RCS 入門

解説

RCS (Revision Control System) は、ファイルのリビジョンを複数管理しま す。 RCS は格納、取り出し、ログ、識別、リビジョンの併合を自 動 化 し ま す。 RCS は 頻繁に更新されるテキスト、たとえば、プログラム、ドキュメン ト、グラフィックス、論文、定型手紙等を扱うのに便利です。

基本的なユーザインタフェースはとても単純です。初心者は 2 つのコマンド、 ci(1) と co(1) を覚えるだけで使用できます。 ci はチェックイン “check in” を省略した名前です。これは、ファイルの内容を「 RCS ファイル」と呼 ば れる記録用のファイルに格納します。 RCS ファイルは、特定ファイルの全リビ ジョンを含んでいます。 co はチェックアウト“check out” を省略した名前 で す。これは、 RCS ファイルからリビジョンを取り出します。

RCS の機能

テキストの複数のリビジョンの保存と取り出しを行います。 RCS は すべての古いリビジョンを効率的な方法で保存します。ファイルを 変 更 しても元のリビジョンが失なわれることはなく、いずれも取り出す ことが可能です。リビジョンは、リビジョン番号、シンボ ル 名、 日 付、作者、状態を指定して取り出せます。

完全な変更の履歴を管理します。 RCS は、すべての変更点を自動的 に記録します。各リビジョンの内容とともに、作者、チェックイン し た 日 時、 変更点を要約したログメッセージが記録されます。ログに よって、どのような変更が行われたのかがひと目でわかります。 ソー ス リストを見比べたり、一緒に作業しているプログラマにたずねたり する必要はありません。

アクセス矛盾を解決します。複数のプログラマがあるファイルの同 じ リ ビジョンに対して変更を加えようとした場合、 RCS は警告を発 し、他者が行った変更を台無しにしてしまうのを防ぎます。

リビジョンの木を管理します。 RCS はモジュールごとに独立した開 発ラインを管理できます。 RCS は、リビジョンの系図を表現した木を 保存します。

リビジョンを併合し、矛盾を解決します。あるモジュールの 2 つ のリビジョンを併合することができます。併合しようとする 2 つのリ ビジョンが、あるコードの同じ部分に対する変更を含 ん で い た 場 合、 RCS は変更が重複していると警告します。

リリースと構成を管理します。リビジョンにはシンボル名をつける ことができま す。 ま た、 「リ リー ス 版(released)」、 「安 定 版(stable)」、 「実験版(experimental)」といった状態をつけること もできます。これにより、単純かつ直接的にモジュールの構成を表 す ことができます

リビジョン番号、作成日時、作者等を自動的に識別することができ ます。識別情報は、消印のようにテキストの適当な場所に埋め込む こ と ができます。これにより、あるソフトウェアの構成にどのモジュー ルのどのリビジョンが使用されているかを判断することが容易にな り ます。

必要なディスク容量を最小にします。 RCS は、リビジョンのために 最小のスペース(差分のみ)しか消費しません。もし途中のリビジョ ン が 削除されたなら、記録されていた差分もそれに従って小さくなりま す。

RCS 事始め

RCS の管理下に置きたい f.c というファイルがあるとします。もし、まだ作成 していなければ、 RCS ディレクトリを以下のコマンドにより作成します。

mkdir RCS

次に ci (チェックイン) コマンドを実行します。

ci f.c

こ れ により、 f.c の内容をリビジョン 1.1 として記録した RCS ファイルが RCS ディレクトリ内に作成され、 f.c は削除されます。また、 cif.c に 関 する説明文の入力を促します。説明文にはファイルの内容を要約して書きま す。以降 ci を実行するたびに、ファイルに加えた変更の要約を入力するよ う に促します。

RCS ディレクトリにあるファイルは RCS ファイルと呼ばれ、それ以外のファイ ルはワークファイルと呼ばれます。先の例で挙げたワークファイル f.c を取り 戻すには co (チェックアウト) コマンドを実行します。

co f.c

このコマンドは RCS ファイル中の最新のリビジョンを取り出してファイル f.c に書き出します。もし、 f.c に変更を加えたければ、次のコマンドを 使っ て チェックアウトしロックしなければいけません。

co −l f.c

これで f.c を編集することができます。

あ る程度編集したところで、どのような変更を加えたか知りたくなるときがあ ります。この場合は、以下のコマンドを実行します。

rcsdiff f.c

このコマンドは、最後にチェックインしたリビジョンとワークファイルの違 い を 表示します。編集が終わったら、以下のコマンドにより、もう一度チェック インすることができます。

ci f.c

これにより、リビジョン番号が自動的に付け直されます。

もし ci

ci error: no lock set by your name

というエラーメッセージを出力したなら、それは、ロックせずにチェックア ウ ト したファイルをチェックインしようとしたからです。もちろん、ここでロッ クしチェックアウトし直すのでは遅すぎます。ここでチェックアウトする と、 あ なたが行った編集は上書きされて失われてしまうからです。かわりに、以下 のコマンドを実行します。

rcs −l f.c

これは、ほかに誰もロックしていなければ、最新のリビジョンをロッ ク し ま す。 もし、すでに誰かがロックしてしまっていたなら、その人と相談しなけれ ばなりません。

ロックすることにより、あなただけがファイルを更新(チェックイン) できるよ う になり、同時に複数の人が同じファイルを編集する際の厄介な問題を回避す ることができます。たとえリビジョンがロックされていても、そのファイル を チェッ クアウトして内容を見たり、コンパイルすることは可能です。ロック機 構は、ロックした人以外が チェックインできないようにするだけです。

もし扱う RCS ファイルが個人的なもの、すなわちそのファイルに対して新しい リ ビジョンをチェックインするのがあなただけである場合、厳格なロック機構 は必要ないでしょう。厳格なロック機構はオフにすることもできます。もし 厳 格なロックモードがオフになっているなら、 RCS ファイルの所有者はロックし ていないファイルをチェックインすることができます(それ以外の人はロックが 必要です)。厳格なロックモードのオンとオフは、それぞれ以下のコマンドによ り行います。

rcs −L f.c 及び rcs −U f.c

もしワークディレクトリに RCS ファイルをまき散らしたくないなら、 RCS とい う 名 前 の ディ レクトリを作成し、 RCS ファイルをすべてその下に移動しま す。 RCS コマンドは RCS ファイルを探すとき、まず、 RCS ディレクトリを 検 索 します。この場合も、これまでに述べてきたコマンドは引数をいっさい変更 せずに実行できます(実際は RCSRCS ファイルとワークファイルの対を指示 する方法は 3 通りあります: (a) 両方を指定する、(b) ワークファイルのみを 指定する、 (c) RCS ファイルのみを指定する。 RCS ファイルとワークファイル は 自由なパスに置くことができますが、 RCS コマンドはファイルの対をインテ リジェントに探します)。

チェックインしたときにワークファイルが削除されないようにする (編集を 続 けたり、コンパイルしたりする場合)には以下のコマンドを使います。

ci −l f.c あるいは ci −u f.c

これらのコマンドは通常どおり f.c をチェックインします。しかし、自動的に チェックアウトも行います。最初の例ではロックを行い、2 番目の例では ロッ クを行いません。このようにすればチェックアウト操作を 1 回省けます。最初 の例は編集を続ける場合に、2 番目の例は単にファイルを読みたかったりコ ン パ イルしたりする場合に便利です。どちらの場合も、ワークファイル中の識別 用マーカ(後述)が更新されます。

ci にチェックインするリビジョンの番号を指定することができます。それまで の リ ビ ジョンが 1.1、1.2、1.3... だったときに、以下のコマンドによりリ リース2 を開始することができます。

ci −r2 f.c あるいは ci −r2.1 f.c

これにより、新しいリビジョンには番号 2.1 がつけられます。以降、 ci はこ の ファイルの新しいリビジョンに 2.2、2.3...と番号をつけていきます。対応 した以下の co コマンド

co −r2 f.c 及び co −r2.1 f.c

は、リビジョン番号が 2.x である最新のリビジョン、リビジョン 2.1 をそ れ ぞ れ チェッ ク ア ウ ト します。 co にリビジョン番号を指定しない場合、 幹(trunk)の上の最新のリビジョン (すなわち、x.x の形式で最大のリビジョン 番号を持つリビジョン)がチェックアウトされます。リビジョンの枝(branch)を 用いるためには 3 つ以上の番号が必要になります。たとえば、1.3 から枝を作 成するには、以下のコマンドを実行します。

ci −r1.3.1 f.c

こ れにより、リビジョン 1.3 上に番号 1 の枝を作成し、枝上の最新リビジョ ンとして 1.3.1.1 を割り当てます。枝の詳細については rcsfile(5) を参照し てください。

自動識別

RCS は、リビジョンの識別のために特別な文字列をソースやオブジェクトコー ドに埋め込むことができます。リビジョンの識別を行うためには、以下の文 字 列(マーク)

$Id$

をコメントなどのテキスト部分に書きます。 RCS は、このマークを次の形式の 文字列に置換します。

$Id: ファイル名 リビジョン 日付 時刻 作者 状態 $

このようなマークをモジュールのソースコードの 1 ページ目に置くこと に よ り、編集しているファイルのリビジョンをすぐに判断することができます。 RCS はマークの更新を自動的に行います。マークをオブジェクトコードに組み込 む に は、それをリテラルな文字列中に含めます。C 言語では、以下のようにしま す。

static char rcsid[] = "$Id$";

ident コマンドは、オブジェクトファイルやダンプ出力からもマークを探し 表 示することができます。従って ident コマンドを用いることにより、あるプロ グラムがどのモジュールのどのリビジョンによって作成されたかを知ること が できます。

マーク $Log$ をテキストやコメント内に含めることも有用かもしれません。こ のマークはチェックインのときに要求されたログを蓄えていきます。これに よ り、変更の履歴を直接、ファイルに記録することができます。 RCS にはほかに もいくつかのマークがあります。詳しくは co(1) を参照してください。

作者

Author: Walter F. Tichy.
Manual Page Revision: 1.5; Release Date: 1999/08/27.
Copyright © 1982, 1988, 1989 Walter F. Tichy.
Copyright © 1990, 1991, 1992, 1993 Paul Eggert.

関連項目

ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1)
Walter F. Tichy, RCS --A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

スポンサーリンク