ci(1) FreeBSD 一般コマンドマニュアル

ci

前のページ 上に戻る 次のページ

ci



書式

       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 はロックし、 ci -u はロックを解除します。これら
       のオプションが指定されていれば、あたかも直前のリビジョンに
       対して co -l または co -u を実行したかのようにして直前のリ
       ビジョンの内容を取り出します。復元が行われる場合、 -n-s オプションは復元されるリビジョンに対して作用します。

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

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

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

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

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

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


オプション

       -rrev  リビジョン rev をチェックインします。

       -r     -r オプションをリビジョン抜きで使用した場合、 ci に
              とって特別な意味が有ります。他の RCS コマンド で は
              -r オプションを単体で使用するとデフォルト枝の最新の
              リビジョンを指定します。しかし、 ci では ロッ ク 解
              除、 ワークファイル削除を行い、シェルのエイリアスや
              スクリプトによりデフォルトとされてしまった -l-u
              オプションの効果を打ち消します。

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

       -u[rev]
              -l とほぼ同様の動作をしますが、登録されたリビジョン
              はロックされません。これは、チェックインし た リ ビ
              ジョンの内容をすぐに参照したい場合に便利です。

              -l 、リビジョン無し -r, -u オプションは、最後に指定
              ルトのログメッセージを作成します。本オプション は、
              配 布されたソフトウェアを登録するのに便利です。複数
              のサイトに配布されたリビジョンは、元のリビジョン 番
              号、 作成日付、状態、作者を保存するために、 -k オプ
              ションを使って登録するべきです。ワークファイルの キ
              ー ワ ー ドから取り出した値とログメッセージは、 -d,
              -m, -s, -w や、他のリビジョン番号を生成するようなオ
              プションにより変更することができます。

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

       -i[rev]
              最 初のチェックイン; RCS ファイルが既に有る時にはエ
              ラー報告します。特定のアプリケーションのレース状 態
              を避けます。

       -j[rev]
              初 期化を行わず、チェックインします; RCS ファイルが
              無いとエラー報告します。

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

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

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

       -mmsg  チェックインするすべてのリビジョンのログメッセー ジ
              と して msg を用います。慣習的に # で始まるログメッ
              セージはコメントであり、GNU Emacs の vc パッケー ジ
              の よ う な プ ロ グ ラムはこれを無視します。また、
              {clumpname} (の後に空白が続く) ログメッセージは可能
              で あればまとめられることを意味します。それはたとえ
              別々のファイルに関連づけられていてもで す;  {clump-
              name}  ラベルは、まとめる目的でのみ使用されます。そ

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

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

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

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

              旧バージョンとの互換性のため、引数のない -t   オ プ
              ションは無視されます。

       -T     新しいリビジョンが存在し、 RCS ファイルの修正時刻が
              新しいリビジョンの時刻よりも古ければ、 RCS ファイル
              の 修正時刻に対して新しいリビジョンの時刻を代入しま
              す; そうでない場合は RCS ファイルの修正時刻は保たれ
              ま す。リビジョンをロックした場合は、 ci は通常 RCS
              ファイルの修正時刻を現在の時刻に設定します。なぜ な
              ら ロッ クが RCS ファイルに格納され、ロックの削除は
              RCS ファイルの変更を要するからです。 RCS ファイルが
              ワークファイルよりも新しくなる方法として 2 通り有り
              ます: まず、 ci -M は現在時刻以前の日付でワークファ
              イ ルを作成します; 2 番目に、直前のバージョンを回復
              する時、ワークファイルを変更しない場合にも RCS ファ
              イルは変更され得ます。 RCS ファイルのワークファイル
              における make(1) 依存により、上記 2 ケースは過剰 の
              再 コンパイルという結果になり得ます。 -T オプション
              を使用することで、RCS ファイルの日付をごまかし、 再
              コ ン パ イルを禁止します。このオプションは注意して
              使って下さい; あるワークファイルのチェックイン が、
              同じ RCS ファイルに関連づけられている別のワークファ
              イルに影響を及ぼすべき時でも、再コンパイルを抑制 し
              得 ます。例えば、RCS ファイルの時刻を 01:00、 (変更
              された) ワークファイルの時刻を 02:00、別の ワ ー ク
              ファ イルのコピーの時刻を 03:00、現在の時刻を 04:00
              とします。ここで、 ci -d -T とすると、RCS ファイ ル
              の 時刻は通常の 04:00 ではなく 02:00 になります; こ
              の結果、 make(1) は別のコピーが RCS ファイルより も
              新しいと (誤って) 認識します。
              ル名であるとみなします。拡張 子 が 空 の 場 合 は、
              RCS/path   ま たは path1/RCS/path2 形式のものを RCS
              ファイル名であるとみなします。本オプションの場 合、
              /  で区切ることにより、複数の拡張子を指定できます。
              たとえば、 -x,v/ は、 ,v と空の拡張子の 2 つの拡 張
              子を持つ RCS ファイルを指定します。複数の拡張子が指
              定された場合、指定された順に RCS ファイルを検索しま
              す。最初に見つかったサフィックスが RCS ファイルに対
              して用いられます。 RCS ファイルを生成できるが、 RCS
              ファ イルが見つからないときは、これらのサフィックス
              を新しいファイル名に対して用います。デフォルトの 拡
              張 子 は、 インストールされる環境により異なります。
              UNIX のようなコンマをファイル名中に含めることの出来
              る計算機では、通常 -x,v/ が、それ以外の計算機では空
              の拡張子が用いられます。

       -zzone キーワード置換での日付の出力書式の指定を 行 い、 ま
              た、  -ddate オプションでの date のデフォルトのタイ
              ムゾーンの指定を行います。 zone は、 省 略 す る 事
              も、UTC からの数値差で指定する事も、特別な文字列 LT
              を使ってローカル時間で指定する事もできます。デ フォ
              ル ト で は zone は空であり、この場合は伝統的な RCS
              フォーマット、すなわちタイムゾーン無しの UTC であり
              日 付をスラッシュで区切ります; そうでない場合は時刻
              はタイムゾーン付の ISO 8601 フォーマットです。例 え
              ば、 ローカルタイムが 1990 年 1 月 11 日 太平洋標準
              時間 (UTC の 8 時間西) 午後 8 時の場合、時間の出 力
              は次のようになります:

                     オプション時刻の出力
                     -z        1990/01/12 04:00:00        (デフォルト)
                     -zLT      1990-01-11 20:00:00-08
                     -z+05:30  1990-01-12 09:30:00+05:30

              -z  オプションは RCS ファイルに格納されている日付 (
              常に UTC です) には影響しません。


ファイル名規則

       RCS ファイルとワークファイルの組み合わせは 3 通りの方法 で
       指定することができます (使用例の項目も参照してください)。

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

       2)  RCS   ファイルのみを指定する。ワークファイルがカレント
       ディレクトリに作成され、RCS ファイル名から path1/ と拡張子
       X を取り除いたファイル名になります。
       ます。すると、RCS コマンドは d/RCS をディレクトリとして オ
       ープンしようとしますが、ディレクトリではないのでオープンす
       ることができず失敗します。


使用例

       RCS 拡張子が ,v 、カレントディレクトリには RCS ファイル を
       含 む RCS というサブディレクトリがあり、 io.c,v があると仮
       定します。ここで、以下に示したコマンドを実行すると、どれも
       カレントディレクトリにある io.cRCS/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 ファイル
       が存在するディレクトリに作成されます。空ではない拡張子を用
       いている場合、セマフォファイル名の先頭文字には、拡張子の先
       頭文字と同じ文字が用いられます; よって、拡張子として、ワー
       クファイルの拡張子の先頭文字と同じ文字を指定しないように注
       意してください。空の拡張子を指定している場合、セマフォファ
       イル名の最後の文字がアンダスコア ( _ ) となります。

       ci   は、 RCS ファイルやワークファイルを変更しません。通常
       ci はそれらのファイルをアンリンクし、新しいファイルを作 成
       します; ただし、RCS ファイルへのシンボリックリンクの鎖を壊
       す代わりに、目的のファイルをアンリンクします。よって、  ci
       は変更されるワークファイルへのハードリンク、シンボリックリ
       ンクを全て壊します; さらに、RCS ファイルへのハードリンクは
       無効となり、シンボリックリンクは保存されます。

       実効ユーザは、RCS ファイルを含むディレクトリの検索および書
       き込み権を持っていなければなりません。通常実ユーザは、 RCS
       ル を変更する RCS コマンドを使用することができます。たとえ
       ば、ユーザが複数のグループに属することが出来る計算機では、
       RCS ディレクトリをあるグループのみが書き込み権を持つように
       設定します。これは、略式のプロジェクトでは十分ですが、グル
       ー プに所属するユーザが自由に RCS ファイルを変更することが
       でき、 RCS ファイルすべてを削除することもできます。その た
       め、 正式なプロジェクトでは、 RCS ファイルを自由に操作きる
       RCS 管理者と、新たなリビジョンをチェックインすること以外の
       操作はできない他のユーザとを、区別することがあります。


SETUID の使用

       RCS 管理者以外のユーザがリビジョンを削除できないようにする
       には、以下のように setuid 特権を使用することができます。

       o その計算機で RCS にて setuid が使用できるか確認しま す。
         疑 問 があるときは、信頼できる専門家に意見を聞いてくださ
         い。最も良いのは、 seteuid() システム コ ー ル が  Posix
         1003.1a Draft 5 に記述されているように動作することです。
         なぜなら、実ユーザが root であっても、RCS は実ユーザと実
         効ユーザを簡単に切り替えることができるからです。その次に
         良いのは、 setuid() システムコールが saved setuid (Posix
         1003.1-1990 の {_POSIX_SAVED_IDS} の動作) をサポートして
         いる場合です; この場合、実ユーザもしくは実効 ユ ー ザ が
         root   である時のみ失敗します。 RCS は setuid に失敗する
         と、ただちに終了します。

       o ユーザグループの RCS 管理者として、ユーザ A を選びます。
         A  だけが、RCS ファイルに対して rcs コマンドを実行するこ
         とができます。 Aroot や、特権を持ったユーザであっ て
         はいけません。相互に異なるユーザグループには、異なる管理
         者を使用するべきです。

       o ユーザが実行するファイルのディレクトリに、パス名 B を 選
         びます。

       o 以下のように、通常のインストールディレクトリ D から、 cicoB にコピーし、 A へ setuid します:

              mkdir  B
              cp  D/c[io]  B
              chmod  go-w,u+s  B/c[io]

       o 以下のように、各ユーザのパスに B を加えます:

              PATH=B:$PATH;  export  PATH  # ordinary shell
              set  path=(B  $path)  # C shell

       o 以下のように、 A だけが書き込み許可を持つ RCS ディレクト
         リ R を作成します:

              mkdir  R
              chmod  go-w  R

         ーザに、登録の権限を与えます。チェックインを制限したい場
         合は、 A がそのファイルに対して rcs -a を実 行 し ま す;
         rcs(1) を参照してください。特に rcs -e -aA は、 A だけに
         アクセスを制限します。

       o 初めてチェックインを行う前に、 Arcs -i によって新 し
         い  RCS ファイルを初期化します。チェックインを制限したい
         場合、 -a オプションを付け加えます。

       o setuid 特権は、 ci, co, rcsclean のみに与えます; rcs  や
         他のコマンドに、setuid 特権を与えてはなりません。

       o RCS コマンドに対して、他の setuid コマンドを実行しないで
         ください。 setuid はあなたが考えるより扱いにくいも の で
         す。


環境変数

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

       TMPDIR 一時ディレクトリ名を指定します。設定されていない 場
              合は、環境変数 TMPTEMP とを調べ、始めに見つかっ
              た値を用います; どれも設定されていない場合は、計 算
              機依存のデフォルトのディレクトリ (たいていは /tmp )
              を使用します。


診断

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


作者

       Author: Walter F. Tichy.
       Manual Page Revision: 1.6; Release Date: 1999/08/27.
       Copyright (C) 1982, 1988, 1989 Walter F. Tichy.
       Copyright  (C)  1990, 1991, 1992, 1993, 1994, 1995 by Paul
       Eggert.


関連項目

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



ABELNET VPSサービス