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.