RCS ファイルにリビジョンをチェックインする
rev )
は、
-f ,
-i ,
-I ,
-j ,
-k ,
-l ,
-M ,
-q ,
-r ,
-u
のオプションのうちのいずれかで指定することができます。
rev
はシンボル、数値、あるいは両者の組み合わせたものです。
rev
で使用するシンボル名は定義済みでなければなりません;
チェックイン時にシンボル名を割り当てる方法については
-n
および
-N
を参照して下さい。
もし
rev
が
$
ならば、
ci
はワークファイル中のキーワードからリビジョン番号を決定します。
もし
rev
がピリオドから始まる場合、デフォルトの枝 (通常は幹 (trunk)) に格納されます。
もし
rev
が枝番号に続いてピリオドである場合、当該枝の最新のリビジョンが使用されます。
rev
がリビジョン番号の場合、
それは登録する枝のなかで最も大きな値である必要があります。
さもなければ、新しい枝を作成する必要があります。
rev
がリビジョン番号ではなく枝番号の場合、
その枝に対する新しいリビジョンが作成されます。
新しいリビジョン番号は、その枝の先端リビジョン番号に 1 を加えたものとなります。
もし
rev
が存在しない枝番号ならば、新たな枝が作成され、初期リビジョンとして
rev .1
が作成されます。
8
rev
が省略された場合、
ci
はユーザが行った最後のロックからリビジョン番号を決定します。
ユーザがある枝の先端リビジョンをロックしている場合は、
新たなリビジョンがその枝に追加されます。
新しいリビジョン番号は
先端リビジョン番号に 1 を加えたものになります。
ユーザが先端ではないリビジョンをロックしている場合は、
新たな枝が作成されます。
新たな枝番号は、ロック対象のリビジョンの
最も大きな枝番号に 1 を加えたものになります。
デフォルトでは、新たな枝やリビジョンの番号は
1
となります。
rev
が省略され、ユーザがロックを行わず、そのファイルの所有者であり、
かつロックが
非厳格モード
であるなら、
デフォルトの枝 (通常は幹 (trunk);
rcs (1)
の
-b
オプションの項を参照) に新たなリビジョンが作成されます。
例外: 幹 (trunk) においてリビジョンを追加することはできますが、
途中に挿入することはできません。
-r rev
rev
をチェックインします。
-r
-l [\f2rev]
-u [\f2rev]
-f [\f2rev]
-k [\f2rev]
-q [\f2rev]
-i [\f2rev]
-j [\f2rev]
-I [\f2rev]
-d [\f2date]
date
を用います。
date
は
co (1)
で記述された自由形式で指定することができます。
これは、チェックイン日時をごまかしたい場合や、
日付キーワードがワークファイルにないにもかかわらず
-k
オプションを使いたい場合に便利です。
date
が指定されなかった場合、ワークファイルの最終更新日付が用いられます。
-M [\f2rev]
f
の内容がキーワード置換により変更された場合も最終更新日時を変更しません。
本オプションを指定すると
make (1)
に影響を与えるので、注意して使用する必要があります。
-m msg
msg
を用います。
慣習的に
#
で始まるログメッセージはコメントであり、GNU Emacs の
vc
パッケージのようなプログラムはこれを無視します。
また、
{ clumpname }
(の後に空白が続く) ログメッセージは可能であればまとめられることを意味します。
それはたとえ別々のファイルに関連づけられていてもです;
{ clumpname }
ラベルは、まとめる目的でのみ使用されます。
それ自身はログメッセージであるとは見なされません。
-n name
name
をつけます。
もし同じシンボリック名が別のリビジョンに割り当てられていた場合、
ci
はエラーメッセージを出力します。
-N name
-s state
state
とします。デフォルトは
Exp
(Experimental: 実験的) です。
-t file
file
の内容で置き換えます。
すでに内容記述テキストがある場合はこれを削除します。ファイル名
file
は
-
で始まってはいけません。
-t- string
string
で置き換えます。
すでに内容記述テキストがある場合は削除されます。
-t
オプションは、どちらの形式で使う場合も、
最初のチェックイン時にしか意味を持ちません。
それ以外の場合は単に無視されます。
最初のチェックイン時に
-t
オプションが指定されなかった場合、
ci
は標準
入力から内容記述テキストを読み込みます。
テキストは、ファイル終端 (EOF) あるいはピリオド (
.
) のみの行で終了します。
ユーザへの問い合わせが可能な場合には、
テキストの入力を促すプロンプトが表示されます (
-I
オプション参照)。
旧バージョンとの互換性のため、引数のない
-t
オプションは無視されます。
-T
-w login
login
をリビジョンの作者として登録します。
作者名をごまかしたい場合や、
作者キーワードがワークファイルにないにもかかわらず
-k
オプションを使いたい場合に便利です。
-V
\*r のリビジョン番号を表示します。
-V n
n
のエミュレーションを行います。詳細は
co (1)
を参照してください。
-x suffixes
-z zone
date
のデフォルトのタイムゾーンの指定を行います。
zone
は、省略する事も、UTC からの数値差で指定する事も、特別な文字列
LT
を使ってローカル時間で指定する事もできます。
デフォルトでは
zone
は空であり、
この場合は伝統的な \*r フォーマット、
すなわちタイムゾーン無しの \*u であり日付をスラッシュで区切ります;
そうでない場合は時刻はタイムゾーン付の \*i 8601 フォーマットです。
例えば、ローカルタイムが 1990 年 1 月 11 日 太平洋標準時間
(\*u の 8 時間西) 午後 8 時の場合、時間の出力は次のようになります:
\w'\f3-z+05:30 'u +\w'\f31990-01-11 09:30:00+05:30 'u 4 \f2オプション\f2時刻の出力 \f3-z \f31990/01/12 04:00:00 \f2(デフォルト) \f3-zLT \f31990-01-11 20:00:00-08 \f3-z+05:30 \f31990-01-12 09:30:00+05:30 4n +4n +4n +4n-z オプションは \*r ファイルに格納されている日付 (常に \*u です) には影響しません。
workfile
はファイル名、
X
は \*r ファイルの拡張子です。もし
X
が空なら、
path1 /
は
RCS/
で始まるか、
/RCS/
を含まねばなりません。
2) \*r ファイルのみを指定する。
ワークファイルがカレントディレクトリに作成され、\*r ファイル名から
path1 /
と拡張子
X
を取り除いたファイル名になります。
3) ワークファイルのみを指定する。
ci
はまず、各 \*r 拡張子
X
に対して、
path2 /RCS/ workfileX
形式の名前で検索を行います。
さらに、(もしこれが見つからず、
X
が空でなければ、)
path2 / workfileX
を検索します。
1) または 2) の方法で \*r ファイルが指定されていない場合、
ci
はまずディレクトリ
を検索し、次にカレントディレクトリを検索します。
異常により \*r ファイルのオープンに失敗すると、
ci
はエラー報告します。
他に \*r ファイルのパス名の候補があってもです。
たとえばディレクトリ
d
で \*r コマンドを利用できないようにするには、
d /RCS
なる名前の通常ファイルを作成しておきます。
すると、\*r コマンドは
d /RCS
をディレクトリとしてオープンしようとしますが、
ディレクトリではないのでオープンすることができず失敗します。
3 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;\*r 拡張子が空、カレントディレクトリには \*r ファイルを含む RCS というサブディレクトリがあり、 io.c があると仮定します。ここで以下に示すコマンドは、どれも新しい リビジョンのチェックインを行います。
3 ci io.c; ci RCS/io.c; ci io.c RCS/io.c; ci RCS/io.c io.c;
A
を選びます。
A
だけが、\*r ファイルに対して
rcs
コマンドを実行することができます。
A
は
root
や、特権を持ったユーザであってはいけません。
相互に異なるユーザグループには、異なる管理者を使用するべきです。
bu \nn
ユーザが実行するファイルのディレクトリに、パス名
B
を選びます。
bu \nn
以下のように、通常のインストールディレクトリ
D
から、
ci
と
co
を
B
にコピーし、
A
へ setuid します:
3 \f3mkdir \f2B \f3cp \f2D\f3/c[io] \f2B \f3chmod go-w,u+s \f2B\f3/c[io]bu \nn 以下のように、各ユーザのパスに
B
を加えます:
2 \f3PATH=\f2B\f3:$PATH; export PATH # ordinary shell \f3set path=(\f2B \f3$path) # C shellbu \nn 以下のように、
A
だけが書き込み許可を持つ \*r ディレクトリ
R
を作成します:
2 \f3mkdir \f2R \f3chmod go-w \f2Rbu \nn 特定のユーザだけに \*r ファイルの読み込みを許可したい場合、 そのユーザをユーザグループ G に入れて、さらに
A
が以下のように、\*r ディレクトリを保護します:
2 \f3chgrp \f2G R \f3chmod g-w,o-rwx \f2Rbu \nn (存在すれば) 古い \*r ファイルを R にコピーし、
A
が所有であることを保証します。
bu \nn
\*r ファイルのアクセスリストは、
リビジョンをチェックインおよびロックできるユーザを制限します。
デフォルトのアクセスリストは空で、
\*r ファイルを読むことのできる全てのユーザに、登録の権限を与えます。
チェックインを制限したい場合は、
A
がそのファイルに対して
rcs -a
を実行します;
rcs (1)
を参照してください。
特に
rcs -e -a A
は、
A
だけにアクセスを制限します。
bu \nn
初めてチェックインを行う前に、
A
は
rcs -i
によって新しい \*r ファイルを初期化します。
チェックインを制限したい場合、
-a
オプションを付け加えます。
bu \nn
setuid 特権は、
ci ,
co ,
rcsclean
のみに与えます;
rcs
や他のコマンドに、setuid 特権を与えてはなりません。
bu \nn
\*r コマンドに対して、他の setuid コマンドを実行しないでください。
setuid はあなたが考えるより扱いにくいものです。
\s-1RCSINIT\s0
\s-1TMPDIR\s0
ci
は \*r ファイル名、ワークファイル名、追加するリビジョン番号、直前の
リビジョン番号を表示します。全ての処理が成功した場合のみ、
終了ステータスが 0 になります。
Software\*-Practice & Experience
15 ,
7 (July 1985), 637-654.