CO(1)

名称
co - RCS ファイルからリビジョンを取り出す

書式
co [options] file ...

解説
co は、RCS ファイルからリビジョンを検索し、対応したワークファイルに取り 出します。

RCS 拡張子にマッチするファイル名は RCS ファイルであるとみなし、その他 のファイル名はワークファイルであるとみなします。 ci(1) を参照してください。

RCS ファイルのリビジョンはロックするか、ロックしないで取り出され ます。リビジョンをロックすることにより、同時に複数の変更が行われること を防止します。内容を表示したり、読むだけの処理(たとえば、コンパイル)で 用いたりする場合はロックする必要はありません。編集したり、あとで登録するために 取り出すときは、通常、ロックしなければなりません。他のユーザによってロックされて いるリビジョンをロックすることはできません(ロックは rcs(1) によって解 除することができます)。リビジョンロックして取り出すには、さらに、ユーザが RCS ファイルのア クセスリストに登録されているか、ファイルの所有者であるか、スーパーユーザ であるか、アクセスリストが空でなければなりません。ロックしない で取り出す場合は、アクセスリストや他人のロックに影響されることはありませ ん。

取り出されるリビジョンを、リビジョン番号、枝番号、登 録日時、作者、状態によって指定することができます。 複数のオプションが 指定された場合、 co はデフォルト枝(通常は幹: rcs(1) の -b の項を参照)の すべての条件に合致するリビジョンのうちで最新のものを取り出します。リビ ジョン番号あるいは枝番号は、以下のオプションを使って指定することができ ます: -f 、 -I 、 -l 、 -M 、 -p 、 -q 、 -r 、 -u 。オプション -d (date:日時)、 -s (state:状態)、 -w (author:作者)は、 -f 、 -I 、 -l 、 -M 、 -p 、 -q 、 -r 、 -u オプションにより選択 された枝またはデフォルト枝からリビジョンを選択します。

リビジョンを指定せずに RCS ファイルに対して co コマンドを適用すると、長 さ 0 のワークファイルが作成されます。 co は、つねにキーワード置換を行います (下記参照)。

オプション

-r[rev]
    リビジョン番号 rev 以前( rev と同じものも含む)で最新のリビジョンを取り 出します。 rev がリビジョンではなく枝を指定している場合、その枝上の最新 のリビジョンが取り出されます。 rev が省略された場合、デフォルト枝 ( rcs(1) の -b オプションの項を参照)の最新のリビジョンが取り出されます。 rev が $ の場合、 co はリビジョン番号をワークファイルのキーワードから 取り出します。これら以外の場合、 rev はリビジョンを示すピリオドで区切ら れた数字またはシンボルの列です。シンボルは、 ci(1) や rcs(1) によりリビ ジョン番号と結びつけることができます。

-l[rev]
    -r と同様に動作し、取り出したリビジョンをロックします。

-u[rev]
    -r と同様に動作し、取り出したリビジョンのロックを解除します。それ以前にロッ クされていた場合、これも解除されます。 rev が省略された場合、 co を起動したユー ザがロックしたリビジョンがあれば、そのリビジョンのロックを解除します。さもなければ、 デフォルト枝の最新のリビジョンが対象となります。

-f[rev]
    つねにワークファイルを上書きします。後述の -q オプションを使用する場合、いっしょに -f オプションも 指定すると便利な場合があります。 ファイルモード の項も参照してください。

-kkv
    ワークファイルにデフォルト形式のキーワード文字列を埋め込みます。たとえば、 キーワード Revision に対しては、文字列 $Revision: $ を生成します。ファ イルがロックされるなら Header 、 Id 、 Locker キーワードにロック者名が展開 されます。これがデフォルトの動作です。

-kkvl
    -kkv とほぼ同様ですが、対象となるファイルがすでにロックされていた場合 に、ロック者名が展開されます。

-kk キーワード名のみの文字列を生成し、値は省略します。たとえば、キーワード Revision に対しては、通常の $Revision: $ のかわりに、 $Revision$ を生成します。これは、異なるリビジョンの内容を比較する場合、キーワード 値の違いを無視できるので、便利です。

-ko ワークファイル中のキーワード文字列をそのまま出力します。たとえば、ワーク ファイル中にキーワード文字列 $Revision: 1.1 $ があれば、出力ファイルに もそのままの文字列を埋め込みます。単純に文字列置換を行ってはい けないバイナリファイル等を扱う場合に指定します。

-kv キーワード文字列としてキーワード値のみを生成します。たとえば、キーワード Revision に対して、通常の $Revision: $ のかわりに を生成します。 これは、キーワード文字列から $Revision: $ のようなキーワード区切りを取 り除くことが困難なプログラミング言語用のファイル等を生成するために 使用します。しかしながら、キーワード名が取り除かれてしまうと、それ以 降にキーワード置換を行うことができません。このため、本オプションを -l オプションと組み合わせて使うことはできません。また、ワークファイルの書 き込み権はオフになります。後でワークファイルを編集する場合は、-kv オプショ ンを指定せずにワークファイルを取り出してから行います。

-p[rev]
    ワークファイルとして書き出すかわりに、対象となるリビジョンを標準出力に書き出します。 co をパイプの一部として使用する場合に便利です。

-q[rev]
    診断メッセージを表示しません。

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

-ddate
    選択された枝上の、指定された日付以前の登録日付を持つ最新のリビジョンを 取り出します。日付は自由形式で指定します。タイムゾーンとして LT を指定 することにより、ローカル時間を使用することができます。他の一般的なタイ ムゾーンも使用することができます。たとえば、以下に挙げるいくつかの指定は、 Pacific 標準時におけ る1990年1月11日午後8時と同時刻を示します(Pacific 標準時は UTC よりも 8 時間遅れです)。

        8:00 pm lt
        4:00 AM, Jan. 12, 1990	注記: デフォルトは UTC
        1990/01/12 04:00:00	RCS の日付形式
        Thu Jan 11 20:00:00 1990 LT	ctime(3) + LT
        Thu Jan 11 20:00:00 PST 1990	date(1)
        Fri Jan 12 04:00:00 GMT 1990
        Thu, 11 Jan 1990 20:00:00 -0800
        Fri-JST, 1990, 1pm Jan 12
        12-January-1990, 04:00-WET

    ほとんどの日付の項目にはデフォルト値があります。デフォルトのタイムゾー ンは UTC です。他のデフォルト値は、年、月、日、時、分、秒 の順番で決定 されます。これらの項目のうち、少なくとも 1 つが指定されなければいけません。 指定のある項目よりも先に決定される項目が省略されている場合には、現在のローカ ル時が採用されます。他の省略されたフィールドには最小値が採用されます。 たとえば、 20, 10:30 の場合は、現在の年、月の 20 日 10 時 30 分 00 秒が採用され ます。日付の指定に空白が含まれる場合には、日付の指定をクォートでくくる必要があることに 注意してください。

-M[rev]
    作成されるワークファイルの最終更新日付を、取り出されるリビジョンの日付に します。本オプションを指定すると make(1) が正しく動作しなくなるので、注意して使用する必要があります。

-sstate
    選択された枝上の、状態 state を持つ最新のリビジョンを取り出します。

-w[login]
    選択された枝上の、ユーザ user によって登録された最新のリビジョンを取り 出します。 login が省略された場合は、 co を起動したユーザ名を使います。

-jjoinlist
    joinlist で指定されたリビジョンを結合した新しいリビジョン作成します。本 オプションは、旧バージョンとの互換性のために残されています。 通常、リビジョンの結合に は rcsmerge(1) を用います。

    joinlist は rev2:rev3 形式のリビジョンの対をコンマで区切って並べたリストです。 ここで、 rev2 と rev3 は(シンボリックまたは数字の)リビジョン番号です。 以下の説明で、 rev1 は以下のリビジョンを示します: (1) joinlist に列挙さ れた対のうち、最初のものに対しては、上記の -f から -w オプションによって 選択されたリビジョン。(2) それ以外の対に対しては、直前の対から作成され たリビジョン(すなわち、1 つの対によって作成されたリビジョンは次の結合 のための入力となります)。

    それぞれの対に対して、 co は rev1 と rev3 を rev2 と比較しながら結合し ます。つまり、 rev2 を rev1 と同一にするための変更を、 rev3 のコピーに対し て適用します。 rev2 を同一の祖先とする 2 つの枝の末端のリビジョン rev1 と rev3 を結合するのによく用いられます。もし、3 つのリビジョンが同一の 枝上にあり、リビジョン番号が rev1<rev2<rev3 ならば、結合の結果は、 rev3 の内容のうち、 rev1 から rev2 への変更を無効にしたものになります。 もし、 rev2 から rev1 への変更が rev2 から rev3 への変更と重複している なら、 co は merge(1) に示したような報告を行います。

    最初に指定する対では rev2 を省略することができます。この場合は、 rev1 と rev3 の共通の祖先 リビジョンを rev2 として使用します。もし、いず れかの引数 がリビジョンではなく枝を示しているなら、その枝上の最新のリビジョンが用 いられます。同時に -l オプションや -u オプションを指定すると、 rev1 がロックまたはロック解除されます。

-Vn バージョン n の RCS システムの動作をエミュレートします。 n は 3 、 4 、 5 のいずれかです。これは、古い RCS を使っているユーザと RCS ファイルを交 換するときに便利です。使用している RCS がどのバージョンかを調べるには、 適当なファイルに対して rlog を起動します。最初の数行に文字列 branch: がなければ、それはバージョン 3 です。また、日付に現れる年が 2 桁の数字 ならば、それはバージョン 4 です。どちらでもなければ、バージョン 5 です。 RCS バージョン 3 をエミュレートして作成された RCS ファイルからはデフォルト 枝の情報が失われます。バージョン 4 またはそれ以前のバージョンをエミュ レートして作成されたリビジョンは、最大 13 時間ずれた日付を持つことになり ます。バージョン 3 またはそれ以前のバージョンをエミュレートして取り出 されたファイルには yyyy/mm/dd ではなく yy/mm/dd 形式の日付がキーワード中 に展開されます。また、 $Log$ キーワードでは空白の入り方が異なります。

-xsuffixes
    RCS ファイル拡張子を指定します。詳しくは ci(1) を参照してください。

キーワード置換
テキスト中に存在する $keyword$ または $keyword:...$ 形式の文字列は、 $keyword:value$ 形式の文字列に置換されます。 keyword と value の対については後述します。キーワードはリテラルな文字列として、あるいは リビジョンを特定するためのコメントとして埋められることがあります。

まず、ユーザは $keyword$ なる形式の文字列を埋め込んで RCS ファイルに登 録します。RCS ファイルからワークファイルに取り出されるとき、 co はこの 文字列を $keyword:value$ に置換します。 $keyword:value$ 形式の文 字列を含むものが登録された場合、 value の部分は次に取り出されたときに新 たな値に置換されます。このように、取り出しを行うごとにキーワードの値は 更新されていきます。RCS コマンドのいくつかは、 -k オプションにより、この 動作を変更することができます。

キーワードの種類とその値:

$Author$
    リビジョンを登録したユーザのログイン名

$Date$
    リビジョンが登録された日時(UTC)

$Header$
    標準的なヘッダ。RCS ファイルのフルパス名、リビジョン番号、日時、作者、 状態、ロック者が含まれます。

$Id$
    $Header$ とほぼ同様です。RCS ファイル名は、パスをつけずに埋め込まれます。

$Locker$
    リビジョンをロックしたユーザのログイン名

$Log$
    登録時に与えたログメッセージ。ヘッダとして、RCS ファイル名、リビジョン 番号、作者、日時が埋め込まれる。すでに埋め込まれているログメッセージは 変更されず、新たなログメッセージのみが $Log:...$ のあとに追加される。 ソースファイルの完全なログを記録するときに便利である。

$RCSfile$
    パス名を含まない RCS ファイル名

$Revision$
    リビジョン番号

$Source$
    RCS ファイルのフルパス名

$State$
    リビジョンに rcs(1) か ci(1) の -s オプションにより割り付けられた状態。

ファイルモード
ワークファイルは、 RCS ファイルの読み込みと実行の許可属性を受け継ぎます。 さらに、 -kv オプションが設定されていないか、厳格ロックモード( rcs(1) 参照)でロックせずに取り出していなければ、ユーザに対する書き込み 権が設定されます。

すでに、ワークファイルと同名の書き込み可能なファイルが存在していると、 co は取り出しを中断し、もし可能ならば削除するかどうかを問い合わせます。 もし、すでに存在するファイルが書き込み禁止であったり、 -f オプションが 指定されていた場合には、問い合わせを行わずに削除します。

ファイル
co は ci とほぼ同じくらいのファイルにアクセスします。ただし、ワークファイル を読むことはありません。

環境変数

RCSINIT
    本変数に空白で区切ったオプションを設定することで、コマンドライン引数に先立って処理されます。 詳しくは ci(1) を参照してください。

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

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

関連項目
ci(1), ctime(3), date(1), ident(1), make(1), rcs(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.

制限事項
RCS ファイル、ワークファイルのリンクは保存されません。

キーワードを $keyword:$ 以外の形式に書換える以外に、一部のキーワードの みを展開させる方法がありません。nroff や troff ではキーワード中に空文 字 \& を埋め込むことにより展開を防ぐことができます。

バグ
-d オプションが日付の解釈を間違えることがあります。また、1970 年より前の日付 を受け付けません。