CI(1)

名称
ci - RCS ファイルに新たなリビジョンを追加する

書式
ci [options] file ...

解説
ci は RCS ファイルに新たなリビジョンを追加します。引数のうち、RCS ファイルの拡張子 形式にマッチするファイル名を RCS ファイルとみなします。 それ以外のファ イル名は、新たなリビジョンを含んだワークファイルとみなします。 ci はワー クファイルの内容を対応した RCS ファイルに格納します。もし、ワークファイ ルのみが指定されたなら、 ci はサブディレクトリ RCS、次にワークファイ ルがあるディレクトリの順に対応した RCS ファイルを検索します。詳細は後 述の ファイル名規則 の項を参照してください。

ci が動作するには、 ci を起動したユーザが RCS ファイルのアクセスリスト に登録されているか、アクセスリストが空であるか、ユーザが RCS ファイル の持ち主であるか、スーパーユーザである必要があります。 すでに存在する枝(branch)に新しいリビジョンを追加するには、ブランチの先 端(tip)リビジョン が、追加しようとするユーザによってロックされていなければなりません。さもな ければ、新たな枝を作成することができます。非厳格モード( rcs(1) 参照)の 場合、ファイルの持ち主に対してはこの制限はありません。他人が行っている ロックは、 rcs コマンドによって解除できます。

-f オプションが指定されていなければ、 ci は追加しようとするリビジョンと 直前のリビジョンとの比較を行います。もし、違いがなかった場合、新たなリ ビジョンを作成するかわりに、ワークファイルを元のリビジョンのものに復元 します。復元するときには、ci はいったんワークファイルを削除します。 ci に -l オプション または -u オプションが指定されていれば、あたかも直前のリビジョンに対し て co -l または co -u を実行したかのようにして直前のリビジョンの内容を 取り出します。復元が行われる場合、 -n と -s オプションは復元されるリビ ジョンに対して作用します。

リビジョンを格納するときに、 ci はログメッセージの入力を促すプロンプト を表示します。ログメッセージは、そのリビジョンの変更点の要約です。 ファイル終端(EOF) `.' のみからなる行によって入力を完了させます。複数の ファイルが登録される場合、 ci は前に入力したログメッセージを再利用する かどうかを聞いてきます。もし、標準入力が端末でなければ、 ci は確認を行 わず、登録されるすべてのファイルに対して同じログメッセージを使用します。 -m オプションの項を参照してください。

もし RCS ファイルが存在しなければ、 ci は新規に RCS ファイルを作成し、ワークファイルの 内容を初期リビジョン(デフォルトでは 1.1) として格納します。その場合、アクセスリス トは空に設定されます。初期リビジョンを格納するときは、ログメッセージのかわりにファイルの内 容を記述したテキストを入力します( -t オプションの項参照)。

登録するリビジョンのリビジョン番号(rev)は、 -f, -I, -k, -l, -M, -q, -r, -u のオプションのうちのいずれかで指定することができます。 rev はシンボル、数値、あるいは両者 の混合したものです。もし rev が $ ならば、 ci はワークファイル中のキー ワードからリビジョン番号を決定します。

rev がリビジョン番号の場合、それは登録する枝のなかで最も大きな値である必要がありま す。さもなければ、新しい枝を作成する必要があります。

rev がリビジョン番号ではなく枝番号の場合、その枝に対する新しいリビジョ ンが作成されます。新しいリビジョン番号は、その枝の先端リビジョン番号に 1 を加えたものとなります。もし rev が存在しない枝番号ならば、新たな枝 が作成され、初期リビジョンとして rev.1 が作成されます。

rev が省略された場合、 ci はユーザが行った最後のロックからリビジョン番 号を決定します。もし、ユーザがブランチの先端リビジョンのロックを行って いたなら、新たなリビジョンがその枝に追加されます。新しいリビジョン番号は 先端リビジョン番号に 1 を加えたものになります。もし、ユーザが先端で はないリビジョンをロックしていたなら、新たな枝が作成されます。新たな枝 番号は、ロック対象のリビジョンの最も大きな枝番号に 1 を加えたものになり ます。デフォルトでは、新たな枝やリビジョンの番号は 1 となります。

rev が省略され、ユーザがロックを行ってはいないが、そのファ イルの所有者であり、かつロックを厳格には行わないモード (以下、非厳格モード) であるなら、デフォルトの枝(通常は 幹(trunk): rcs(1) の -b オプションの項を参照)に新たなリビジョンが作成 されます。

例外: 幹(trunk) において、リビジョンを追加することはできますが、途中に挿 入することはできません。

オプション

-r[rev]
    リビジョンを登録します。さらに、対応したロックを解除し、ワークファイル を削除します。これはデフォルトの動作です。

    ci において -r オプションは他の RCS コマンドとは異なる意味を持ちます。 他の RCS コマンドでは -r は単にリビジョンの指定ですが、 ci ではロックの 解除とワークファイルの削除も意味します。 -u オプションの項にトリッキーな例が挙げられています。

-l[rev]
    -r と同様の動作を行ったあと、 co -l と同様の動作も行います。すなわち、登 録されたリビジョンは即座にロックされ、取り出されます。これは、リビジョ ンを登録してさらに編集を続けたい場合に便利です。

-u[rev]
    -l とほぼ同様の効果がありますが、登録されたリビジョンはロックされませ ん。これは、登録したリビジョンの内容をすぐに参照したい(コンパイル等)場合 に便利です。

    -l 、 -r 、 -u オプションは、最後に指定したもののみ が効力を持ちます。たとえば、 ci -u -r は ci -r と等価です。

-f[rev]
    直前のリビジョンとの違いがない場合にも、強制的に新しいリビジョンとして 登録します。

-k[rev]
    ワークファイルからキーワードを探し、リビジョン番号、作成日時、状態、作 者を検索し( co(1) を参照)、登録されるリビジョンに割り当てます。さらに、 ci を起動したユーザ名と実際に登録された日付を含むデフォルトのログメッ セージを作成します。本オプションは、配布されたソフトウェアを登録するのに 便利です。複数のサイトに配布されたリビジョンは -k オプションを使って登 録することで、元々のリビジョン番号、作成日付、状態、作者を保存することができます。 ワークファイルのキーワードから取り出した値は、 -d 、 -m 、 -s 、 -w や、他のリ ビジョン番号を生成するようなオプションにより変更することができます。

-q[rev]
    診断メッセージを表示しません。直前のリビジョンから 変更がない場合、 -f オプションを指定していなければ、登録を行いません。

-I[rev]
    対話モードで動作します。たとえ標準入力が端末でなくても、ユーザに対して 問い合わせを行います。

-d[date]
    登録日付として指定された date を用います。 date は co(1) で記述された自 由形式で指定することができます。これは、 登録日時をごまかしたい場合や、日付キーワードがワークファイルに ないにもかかわらず -k オプションを使いたい場合に便利です。 date が指定されなかった場合、ワークファイルの最終更新日付が用いられます。

-M[rev]
    作成されるワークファイルの最終更新日付を、取り出されたリビジョンの日付 にします。たとえば、 ci -d -M -u f は、 f の内容がキーワード置換により変更 された場合も最終更新日時を変更しません。本オプションを指定すると make(1) が正しく動作しなくなるので、注意して使用する必要があります。

-mmsg
    登録するすべてのファイルのログメッセージとして msg を用います。

-nname
    登録したリビジョンにシンボリック名 name をつけます。もし同じシンボリッ ク名が別のリビジョンに割り当てられていた場合、エラーになります。

-Nname
    -n と同様の動作を行います。ただし、同じシンボリック名が他のリビジョン に割り当てられていた場合は、再割り当てを行います。

-sstate
    登録されるリビジョンの状態を state とします。デフォルトは Exp (Experimental: 実験的)です。

-tfile
    RCS ファイル中の内容記述テキストをファイル file の内容で置き換えます。 すでに内容記述テキストがある場合はこれを削除します。ファイル名 file は - で始まってはいけません。

-t-string
    RCS ファイル中の内容記述テキストを文字列 string の内容で置き換えます。 すでに内容記述テキストがある場合は削除されます。

    -t オプションは、どちらの形式で使う場合も、最初のチェックイン時にしか意 味を持ちません。それ以外の場合は単に無視されます。

    最初のチェックイン時に -t オプションが指定されなかった場合、 ci は標準 入力から内容記述テキストを読み込みます。テキストは、ファイル終端あるいは その行に `.' しかない場合に終了します。ユーザへの問い合わせが可能な場合には、テ キストの入力を促すプロンプトが表示されます( -I オプション参照)。

    旧バージョンとの互換性のため、後に何も続けない -t オプションは無視されます。

-wlogin
    指定された login をリビジョンの作者として登録します。作者名をごまかした い場合や、作者キーワードがワークファイルにないにもかかわらず -k オプションを使いたい場合に便利です。 uses

-Vn RCS システムのバージョン n のエミュレーションを行います。詳細は co(1) を参照してください。

-xsuffixes
    RCS ファイルの拡張子を指定します。拡張子が空ではない RCS ファイルを指定した場合、 suffix まで含めたすべてのパス名を RCS ファイル名であるとみなします。 拡張子が空の場合は、 RCS/file または path/RCS/file 形式のものを RCS ファ イル名であるとみなします。本オプションの場合、 / で区切ることにより、複数の 拡張子を指定できます。たとえば、 -x,v/ は、 ,v と空の拡張子の 2 つの拡張子を持つ RCS ファイルを 指定します。複数の拡張子が指定された場合、指定された順に RCS ファイルを検索します。 デフォルトの拡張子は、インストールされる環境により異なります。UNIX のよ うな計算機では、通常 -x,v/ が、それ以外の計算機では空拡張子が用いられます。

ファイル名規則
RCS ファイルとワークファイルのペア は 3 通りの方法で指定することができます。

1) RCS ファイルとワークファイルの両方を指定する RCS ファイルのパス名は path1/workfileX 形式、ワークファイルのパス 名は path2/workfile 形式を取ります。この場合の、 path1/ と path2/ はパス(異なる場合や、空である場合もある)を示し、 workfile はファイル名、X は RCS 拡張子を指します。もし X が空なら、 path1/は RCS/ であるか、最後が /RCS/ でなければなりません。

2) RCS ファイルのみを指定する ワークファイルパス名は、カレントディレクトリの、RCS ファイル名から path/ と X を取り除いた部分をファイル名に持つファイル名になります。

3) ワークファイルのみを指定する ci はまず、各 RCS 拡張子 X に対して、 path2/RCS/workfileX 形式の名前で検 索を行います。もしこれが見つからず、 X が空でなければ、 path2/workfileX を検索します。

1) または 2) の方法で RCS ファイルが指定されていない場合、 ci は、まずディレクトリ ./RCS を検索し、次にカレントディレクトリを検索します。

ある RCS ファイルパス名のオープンに失敗すると、たとえそれがいくつかあ る可能性の 1 つであっても、 ci はエラーとして処理を終了します。たとえば、 ディレクトリ d で RCS コマンドを利用できないようにするには、 d/RCSなる 名前の通常ファイルを作成しておきます。すると、RCS コマンドは d/RCS をディレクトリとしてオープンしようとしますが、ディレクトリではないので オープンすることはできません。その結果、エラーになるわけです。

例
RCS 拡張子が ,v 、カレントディレクトリには RCS サブディレクトリがあり、 RCS には io.c,v があると仮定します。ここで、以下に示したコマンドを実行すると、 どれもカレ ントディレクトリにある io.c を RCS/io.c,v に登録し、 io.c を削除します。

    ci  io.c;    ci  RCS/io.c,v;   ci  io.c,v;
    ci  io.c  RCS/io.c,v;    ci  io.c  io.c,v;
    ci  RCS/io.c,v  io.c;    ci  io.c,v  io.c;

RCS 拡張子が空、カレントディレクトリには RCS サブディレクトリがあり、 RCS には io.c があると仮定します。ここで以下に示すコマンドは、どれも新しい リビジョンの登録を行います。

    ci  io.c;    ci  RCS/io.c;
    ci  io.c  RCS/io.c;
    ci  RCS/io.c  io.c;

ファイルモード
ci が作成した RCS ファイルは、ワークファイルの読み込みと実行の許可属性を 受け継ぎます。すでに RCS ファイルが存在すれば、 ci はその読み込みと実行 の許可属性を保持します。 ci は、つねに RCS ファイルの書き出し許可属性を不許 可にします。

ファイル
いくつかの一時ファイルが、ワークファイルの存在するディレクトリまたはテ ンポラリディレクトリ(環境変数の項の TMPDIR 参照)に作成されます。 セマフォファイル等のファイルが RCS ファイルが存在するディレクト リに作成されます。空ではない RCS 拡張子を用いている場合、セマフォファイ ル名の先頭 1 文字には、RCS 拡張子の 1 文字目と同じ文字が用いられます。 RCS 拡張子として、ファイル名の先頭として利用できない文字を指定しないよ うに注意してください。空の RCS 拡張子を指定している場合、セマフォファ イル名の最後の 1 文字が _ となります。この場合、ワークファイル名の最 後の 1 文字が _ で終わってはいけません。

ci は、 RCS ファイルやワークファイルを変更しません。通常 ci はそれらの ファイルを削除し、新しいものを作成します。ただし、対象となる RCS ファイルが シンボリックリンクの場合は、シンボリックリンク自体ではなく、そのリンク 先のファイルを削除します。他のシンボリックリンクによる参照に同じ結果を 反映するためです。ワークファイルがシンボリックリンクやハードリンクであっ た場合には、この処置が適用されないため、他の同じ実体を指していたシンボ リックリンクの内容との食い違いが生じます。また、RCS ファイルに対するハー ドリンクは意味がありません。

実効ユーザは、 RCS ファイルを含むディレクトリの検索および書き込み権を 持っていなければなりません。通常、実ユーザは、 RCS ファイルとワークファイ ルの読み込み許可と、それらを含むディレクトリの検索および書き込み権を持っ ていなければなりません。古い計算機のなかには実ユーザと実効ユーザ の間を容易に行き来することができないものもあります。これらの計算機では、実効ユー ザの権限のみが利用されます。 ci や co の実行ファイルに setuid が設定さ れていなければ、実ユーザと実効ユーザは同一です。次節で説明するように、 もし実効ユーザが全 RCS ファイルとそれを含むディレクトリを所有し、実効 ユーザのみが RCS ディレクトリに書き込めるように設定できるなら、RCS ファ イルのセキュリティを強化することが可能です。

RCS ファイルを変更するには RCS ファイルを含むディレクトリの書き込み権 が必要なので、ユーザは RCS ファイルを含むディレクトリの許可属性を変更 することで、RCS ファイルに対するアクセスを制限できます。たとえば、ユーザ のグループを設定できる計算機では、RCS ディレクトリをあるグループのみが 書き込み権を持つように設定します。これは、略式のプロジェクトでは効果が あります。しかし、このやりかたでは、グループに所属するユーザが自由に RCS ファイルを変更することができ、ときには RCS ファイルすべてを削除してしまうか もしれません。そのため、正式なプロジェクトでは、RCS ファイルを自由に操 作きる RCS 管理者を置いて、プロジェクトの他のメンバは新たなリビジョン を登録すること以外の操作をできないようにすることがあります。

環境変数

RCSINIT
    本変数に空白で区切ったオプションを設定することで、コマンドライン引数に先立って処理されます。 空白はバックスラッシュによってエスケープすることができます。 RCSINIT はほとんどの RCS コマンドで参照されます。特に -q 、 -V 、 -x オプションを指定しておくと便利です。

TMPDIR
    一時ファイルを作成するディレクトリ名を指定します。設定されていない場合は、環 境変数 TMP 、 TEMP を調べます。どれも設定されていない場合は、計算機毎に 決められたデフォルトのディレクトリ(ほとんどの場合 /tmp )を使用します。

診断
ci は RCS ファイル名、ワークファイル名、追加するリビジョン番号、直前の リビジョン番号を表示します。処理が成功した場合は終了ステータス 0 を返 します。

作者
Author: Walter F. Tichy.
Revision Number: ; Release Date: .
Copyright © 1982, 1988, 1989 by Walter F. Tichy.
Copyright © 1990, 1991 by Paul Eggert.

関連項目
co(1), ident(1), make(1), rcs(1), rcsclean(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5)
Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.