CO(1) — NEWS-OS Programmer’s Manual
名称
co − RCS リビジョンの取り出し
形式
co [ options ] file ...
解説
co は RCS ファイルからリビジョンを取り出します。 ‘,v’ で終わるファイル名を持つファイルは RCS ファイルとして、 そうでないものは作業ファイルとして扱われます。 co は各 RCS ファイルからリビジョンを取り出し、 それを相当する作業ファイルに格納します。
作業ファイルと RCS ファイルの組は、 以下の 3 つの方法で指定することができます (例も参照してください)。
1) RCS ファイル、作業ファイル共、指定された場合。 RCS ファイル名は path1/workfile,v という形式であり、 作業ファイルは path2/workfile という形式になります。 ここで、path1/ と path2/ はパス名 (2 つが異なっていたり、空のパスであってもよい)、 workfile はファイル名です。
2) RCS ファイルのみが指定された場合。 作業ファイルはカレントディレクトリ内に作成され、 ファイル名は RCS ファイル名から path1/ と サフィックス ‘,v ’ を取り去ったものになります。
3) 作業ファイルのみが指定された場合。 RCS ファイル名は、作業ファイル名から path2/ を取り去り、 接尾詞 ‘,v’ を補ったものになります。
RCS ファイル名が省略されたり、パス名なしで指定された場合、 co はまず、./RCS ディレクトリ、 続いてカレントディレクトリという順で、RCS ファイルを捜します。
RCS ファイルのリビジョンはロックされていても、 あるいはされていなくても、取り出すことができます。 リビジョンをロックした場合、そのリビジョンの更新が禁じられます。 リビジョンの読み出しや処理 (コンパイルなど) のための取り出しに ロックは必要ありません。 編集や、後の格納を予定しての取り出しは通常ロックします。 他人によりロックされているリビジョンのロックは行えません ( rcs(1) コマンドによりロックを解除することができます)。 ロックした状態で co を実行するには、 実行者のログイン名が RCS ファイルの アクセスリスト上になければなりません。 ただし、実行者がスーパーユーザまたはファイルの所有者であるか、 あるいはアクセスリストが空の場合はその限りではありません。 ロック状態でなければ、 co の使用にあたってアクセスリストによる制限はありません。
リビジョンはリビジョン番号、あるいは格納日/時、著者、状態で選択されます。 これらのオプションが全く指定されない場合には、 トランク (幹) 中の最新リビジョンが取り出されます。 複数のオプションが組み合わされて与えられた場合には、 それら全てを満足する最新のリビジョンが取り出されます。 格納日/時、著者、あるいは状態のオプションにより、 指定されているブランチ中のリビジョンが取り出されます。 指定されているブランチとは、 リビジョン番号が与えられているときはそのリビジョンが存在するブランチ、 与えられていないときにはトランク中でもっとも高位のブランチになります。 リビジョン番号は、−l、−p、−q、−r の いずれのオプションでも指定できます。
リビジョンを持たない RCS ファイルに対して co コマンドを実行すると、 コマンドは空のファイルを作成します。 また、 co は常にキーワード変換を行います (以下を参照してください)。
−l[rev] コマンド使用者に対し取り出されたリビジョンをロックします。 省略された場合には、取り出されるリビジョンはロックされません。 リビジョン番号 rev の操作に関しては、 −r オプションの項を参照してください。
−p[rev] 取り出されたリビジョンを、作業ファイルではなく、標準出力へ出力します。 このオプションは、 co がパイプの一部である場合に役立ちます。
−q[rev] 沈黙モード。診断が出力されません。
−ddate 指定されたブランチ内で、格納日/時が指定日時 date より 前または同じであるリビジョンのうち、最新のものを取り出します。 格納日/時はフリーフォーマットで与えることが可能で、 これらはローカルタイムに変換されます。 日付けのフォーマットの例を次に示します。
22-April-1982, 17:20-CDT,
2:25 AM, Dec. 29, 1983,
Tue-PDT, 1981, 4pm Jul 21 (フリーフォーマット)
Fri, April 16 15:52:25 EST 1982 (ctime の出力)
日時に対するフィールドの大部分は、デフォルト値を用いることができます。 co は年、月、日、時、分、秒の順 (大きいものからそうでないものへ) でデフォルト値を決定します。 これらのうち少なくとも一つは指定されなくてはなりません。 省略されたフィールドのうち、指定されたフィールドより大きいものは、 コマンド実行時の値を仮定します。 それ以外の省略されたフィールドは、なるべく小さくなるように選ばれます。 co は、例えば “20, 10:30” を、現在年、現在月、 20 日の 10:30:00 と解釈します。 日時にスペースを含む場合には、 クォーテンションマークで囲まなければなりません。
−r[rev] リビジョン番号が指定された番号 rev より 小さいかまたは同じもののうち、 最新のものを取り出します。 rev がリビジョンではなくブランチを指す場合には、 そのブランチのうち最新のものが取り出されます。 リビジョン番号 rev は ‘.’ によって区切られた 1つ以上の数字および記号の列から構成されます。 記号フィールドに相当する数列は、 ci および rcs コマンドの −n オプションで指定されます。
−sstate 指定されたブランチ内のリビジョンのうち、 状態が state にセットされ、かつ最新のものを取り出します。
−w[login] 指定されたブランチ内のリビジョンのうち、 ログイン名 login のユーザによって格納され、 かつ最新のものを取り出します。 引数の login が省略された場合、 コマンドを実行したユーザと解釈されます。
−jjoinlist ジョインリスト joinlist 中のリビジョンを併合して 新しいリビジョンを作ります。 ジョインリストは、リビジョン番号の組をコンマで区切って並べたものです。 リビジョン番号の組は、rev2:rev3 のような形式で、 rev2 や rev3 はリビジョン番号または記号名です。 最初の組の rev1 は、 −l や −w などのオプションで選択されたリビジョンを表します。 それ以後の組の rev1 は、 その直前の組によって作成されたリビジョンを表します (つまり、 ひとつの組を併合して出力した結果が、次の組の入力となります)。
それぞれの組において、 co コマンドはリビジョン rev1 と rev3 を rev2 について 考慮しながら併合します。 つまり、rev2 を rev1 に変更する変更操作は、 rev3 のコピーに対して適用されることを意味します。 これは、rev1 と rev3 が、rev2 を 共通の祖先として持つ 2つのブランチの末端である場合に、 大変便利です。 同一ブランチ中で、 rev1 < rev2 < rev3 の場合、 併合の結果 rev3 に似たリビジョンを新しく作成しますが、 rev1 から rev2 へ至る変更は取り除かれます。 もし rev2 から rev1 への変更部が、 rev2 から rev3 への変更部分と重なる場合、 co は警告を表示し、重複部分を <<<<<<< rev1,======= と >>>>>>> rev3 で区切って挿入します。
最初の組については、rev2 を省略することができます。 デフォルトは共通の祖先です。 ブランチを指定するような引数があるときには、 そのブランチにおける最新のリビジョンが仮定されます。 −l オプションがあるときには、 最初のリビジョン rev1 はロックされます。
キーワードの置換
文中に埋め込まれた $keyword$ や $keyword:...$ といった文字列は、 $keyword: value $ といった文字列に置き換わります。 keyword と value は以下に示すような組です。 キーワードは、リビジョンを特定するために文字定数あるいは コメント文中に置かれます。
まず最初に、ユーザは $keyword$ の形式で文字列を入力します。 リビジョンを取り出すとき、 co はこれらの文字列を、 $keyword: value $ の形式の文字列に置換します。 $keyword: value $ を含むリビジョンが格納されると、 次回それを取り出す時に value 部分が置換されます。 従ってキーワード値は、取り出しのたびに更新されることになります。
以下に、キーワードと対応する値を示します。
$Author$ リビジョンを格納したユーザのログイン名です。
$Date$ リビジョンが格納された日時です。
$SonyId: co.o,v 4.3500 1994/11/14 14:59:54 root Rel421a+ $
RCS ファイル名、リビジョン番号、日付、著者、状態を含む標準ヘッダです。
$Locker$ リビジョンをロックしたユーザのログイン名 です (もしロックされていなければ空になります)。
$Log$ 格納時のログメッセージで、RCS ファイル名、リビジョン番号、 著者、日付を含むヘッダに続きます。 以前からあるログメッセージは置換されません。 その代わりに、新しいログメッセージが $Log:...$ の 後に挿入されます。 完全な変更ログをソースファイル内に蓄積するときに役立ちます。
$Revision$ リビジョンに割り当てられたリビジョン番号です。
$Source$ RCS ファイルの完全なパス名です。
$State$ rcs −s または ci −s でリビジョンに与えられた状態です。
診断
取得された RCS ファイル名、作業ファイル名、 リビジョン番号が診断として出力されます。 完了コードは最後に取り出されたファイルに依存し、 操作が成功した場合には 0、成功しなかった場合には 1 となります。
例
カレントディレクトリにサブディレクトリ ‘RCS’ があり、 この中に RCS ファイル ‘io.c,v’ が存在するとします。 このとき、次に示すコマンドはいずれも ‘RCS/io.c,v’ から 最新のリビジョンを取得し、それを ‘io.c’ にストアします。
co io.c; co RCS/io.c,v; co io.c,v;
co io.c RCS/io.c,v; co io.c io.c,v;
co RCS/io.c,v io.c; co io.c,v io.c;
ファイルモード
作業ファイルは RCS ファイルから読み出し許可と実行許可を引き継ぎます。 これに加え、ファイルがロックされずに取り出され、 かつロックモードが strict ( rcs(1) を参照してください) に 設定されていない限り、所有者の書き込み許可がオンになります。
作業ファイル名を持つファイルが既に存在し、 かつそのファイルに対する書き込み許可がある場合、 co は −q が与えられていれば取り出し操作を中止し、 −q が与えられていなければ、中止するか尋ねます。 存在する作業ファイルに書き込めない場合、 ファイルは取り出しの前に削除されます。
関連ファイル
コマンドの実行者は、作業ディレクトリに対する書き込み許可、 RCS ファイルに対する読み出し許可、 RCS ファイルが存在するディレクトリに対する 読み出し許可 (読み出しを行うとき)、 あるいは読み出し/書き込み許可 (ロックを行うとき) を 持っていなければなりません。
一時ファイルが多数作成されます。 更新による競合を避けるため、 セマフォファイルが RCS ファイルのディレクトリ内に作成されます。
識別
著者:Walter F. Tichy, Purdue University, West Lafayette, IN, 47907.
リビジョン番号: 4.700 ; リリース日付: 1992/03/13 .
Copyright © 1982 by Walter F. Tichy.
関連事項
ci(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1), rlog(1), rcsfile(5), sccstorcs(8)
Walter F. Tichy, "Design, Implementation, and Evaluation of a Revision Control System," in Proceedings of the 6th International Conference on Software Engineering, IEEE, Tokyo, Sept. 1982.
制限
ある状況下において、オプション −d は誤動作を起こし、 1970 年以前の日付を受け付けなくなります。 書き方を変える以外に、キーワードの展開を抑制する方法はありません。 nroff や troff では、ナルキャラクタ ‘\$’ をキーワードに埋め込むことによって、 これを実現しています。
バグ
オプション −j は 、‘.’ のみの行を含むファイルに対してうまく動きません。
NEWS-OSRelease 4.2.1R