EN JA
RCSINTRO(1)
RCSINTRO(1) FreeBSD General Commands Manual 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 は変更が重複していると警告します。
リリースと構成を管理します。リビジョンにはシンボル名をつけることができます。また、「リリース版 (released)」、「安定版 (stable)」、「実験版 (experimental)」といった状態をつけることもできます。これにより、単純かつ直接的にモジュールの構成を表すことができます
リビジョン番号、作成日時、作者等を自動的に識別することができます。識別情報は、消印のようにテキストの適当な場所に埋め込むことができます。これにより、あるソフトウェアの構成にどのモジュールのどのリビジョンが使用されているかを判断することが容易になります。
必要なディスク容量を最小にします。 RCS は、リビジョンのために最小のスペース (差分のみ) しか消費しません。もし途中のリビジョンが削除されたなら、記録されていた差分もそれに従って小さくなります。

RCS 事始め

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

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

ci f.c

これにより、 f.c の内容をリビジョン 1.1 として記録した RCS ファイルが RCS ディレクトリ内に作成され、 f.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 -U f.c および rcs -L f.c

もしワークディレクトリに RCS ファイルをまき散らしたくないなら、RCS という名前のディレクトリを作成し、RCS ファイルをすべてその下に移動します。 RCS コマンドは RCS ファイルを探すとき、まず、 RCS ディレクトリを検索します。この場合も、これまでに述べてきたコマンドは引数をいっさい変更せずに実行できます (実際は RCS に RCS ファイルとワークファイルの対を指示する方法は 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: 50472; 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.
 
1999-08-27 GNU