RCSINTRO(1)

名称
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 は変更が 重複していると警告します。

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

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

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

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

    mkdir RCS

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

    ci f.c

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

RCS ディレクトリにあるファイルは RCS ファイルと呼ばれます。また、 最初からあったファイルはワークファイルと呼ばれます。ワークファイル f.c を取り戻すには co (チェックアウト) コマンドを実行します。

    co f.c

このコマンドは RCS ファイル中の最新のリビジョンを取り出します。もし、 あなたが 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 -U f.c and rcs -L f.c

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

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

    ci -l f.c or ci -u f.c

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

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

    ci -r2 f.c or ci -r2.1 f.c

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

    co -r2 f.c and co -r2.1 f.c

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

    ci -r1.3.1 f.c

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

  自動認識
RCS は、リビジョンの識別のために特別な文字列をソースやオブジェクトコード に埋め込むことができます。そのようなマークを得るために、以下の文字列を テキストやコメントに書きます。

    $Id$

RCS は、このマークを次の形式の文字列に置換します。

    $Id: filename revision date time author state $

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

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

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

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

作者
Author: Walter F. Tichy.
Revision Number: ; Release Date: .
Copyright © 1982, 1988, 1989 by Walter F. Tichy.
Copyright © 1990, 1991 by 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.