この章では,バージョン・コントロール・システムを使用して,プログラムまたはドキュメントのソース・ファイルを適切に管理する方法について説明します。 バージョン・コントロール・システムは,ドキュメント・リビジョンの保存,取り出し,ロギング,識別,およびマージを自動的に行います。 バージョン・コントロールは,プログラム,ドキュメント,グラフィックス,論文などの,頻繁に改訂されるテキストを管理する場合に有効です。 Tru64 UNIX では,機能の若干異なった,次の 2 つのシステムを提供します。
リビジョン・コントロール・システム (RCS)
ソース・コード・コントロール・システム (SCCS)
この章では,基本的なバージョン・コントロールの概念を紹介し,RCS コマンド,SCCS コマンド,およびユーティリティの使用方法について説明します。 概念を紹介した後に,各システムの応用的な使用方法を説明します。
リビジョン制御の概要 (6.1 節)
バージョン・コントロールの概念 (6.2 節)
ファイルの複数バージョンの管理 (6.3 節)
バージョン・コントロール・ライブラリの作成 (6.4 節)
RCS の使用方法 (6.5 節)
SCCS の使用方法 (6.6 節)
RCS コマンドと SCCS コマンドの機能比較 (6.7 節)
この章の例は,「Orpheus Authoring Tools」と呼ばれる製品のためのキットを想定して説明しています。
例の中のキットも Orpheus 製品の 1 つであると考えてください。
このキットはドキュメント・ビルダ (document builder) なので,キット名は DCB と省略されます。
また,プロジェクト・ディレクトリは
dcb_tools
になります。
6.1 リビジョン制御の概要
RCS または SCCS を使用すると,ソース・ファイルをシェアード・ライブラリに保存して管理することができます。 どちらのシステムにも,簡便なコマンド行インタフェースが用意されています。 基本的なコマンドで,修正したソース・ファイルをチェックインしてバージョン・コントロール・ファイルを作成することができます。 バージョン・コントロール・ファイルには,ソース・ファイルの各リビジョンがすべて含まれます。 バージョン・コントロール・ファイルからファイルをチェックアウトして編集する場合には,システムは指定した 1 つまたは複数のリビジョンをライブラリから読み出して,編集に使用するための作業ファイルを作成します。
さらに高度なインタフェース・コマンドを使用すると,次のことができます。
ファイルの現在の状態とそれを編集したユーザ名を確認する。
ファイルの古いバージョンを復元する。
各バージョンごとに,システムは,そのバージョンの変更内容,変更したユーザの名前,および変更の理由を格納しています。
2 人のユーザが,知らずに同一のファイルを同時に変更することによる問題を防止する。
複数の分岐したファイル・バージョンを保守する。
分岐したバージョンは,分岐前のシーケンスとマージすることができます。
ファイルの不正な変更を防止する。
RCS では,リリースおよび構成の制御も可能である。
各リビジョンに,シンボル名を付けることもできます。 また,ファイルの状態 (リリース済,確定,テスト中など) に応じたマークを付けることもできます。
RCS と SCCS のいずれをバージョン・コントロール・システムとして採用するかは,開発環境および各ユーザに固有のリビジョン・コントロールに関する要求によって決定します。
最終的には,必要とされるセキュリティと多様性の度合いによって決定することになります。表 6-1
に,それぞれのシステムで一般的に使用されているいくつかの機能の一覧を示します。
表 6-1: RCS と SCCS の機能
機能 | 説明 |
テキストの複数リビジョンの保存と取り出し | いずれのシステムの場合も,簡単な方法でファイルに対するすべての変更内容を保存し,取り出すことができる。 さらに RCS では,リビジョン番号のレンジ,シンボル名,日付,著者,および状態に基づいてリビジョンを取り出すことができる。 |
変更内容の完全なヒストリの保守 | いずれのシステムの場合も,自動的に変更内容のログを生成する。 いずれのシステムも,各リビジョンのテキストだけでなく,著者,チェックインの日付と時刻,および変更内容を要約したログ・メッセージを格納する。 |
アクセスの矛盾の解決 | いずれのシステムの場合も,2 人のユーザが互いに気づかずに同じファイルを変更することを防ぐ。 |
リビジョンのツリー構造の保守 | いずれのシステムの場合も,各ファイルでの複数の開発ラインを保守できる。 |
複数の改訂ファイルを矛盾解決後にマージ | いずれのシステムの場合も,2 つの開発ラインから変更内容をマージしてファイルを作成できる。 また,RCS の場合は,ファイルの複数のバージョンで変更が重複している場合,ユーザに警告する。 |
リリースおよび構成の制御 (RCS のみ) | RCS では,リビジョンにシンボル名を付けて,モジュールの構成を簡単かつ直接的に説明できるようにしている。 |
各リビジョン識別の自動化 | いずれのシステムの場合も,キーワードを使用して,ファイルのリビジョンに,名前,リビジョン番号,時刻,著者などを加えることができる。 |
RCS と SCCS では,バージョン・コントロール・ライブラリと呼ばれる予約領域ディレクトリにファイルを保存します。 各ソース・ファイルの内容は,1 つのバージョン・コントロール・ファイルとして格納されます。 バージョン・コントロール・ファイルは,RCS では RCS ファイル,SCCS では s ファイルと呼ばれます。 バージョン・コントロール・ファイルには,元のファイル (SCCS では g ファイル) と,元のファイルに対応するすべての変更内容 (すなわちデルタ) が含まれます。 各デルタの内容は,誰が何のために変更を行ったのかを説明するテキストです。 変更情報そのものは,行テキストにマークを付けた形式で格納されます。 削除行または変更行は,削除のマークを付けられますが,実際には削除されません。 新規の行は,古い行を編集したバージョンか,または適切な場所に完全に新しいテキストが挿入されてマークされたものかのいずれかになります。 バージョン・コントロール・システムは,必要なバージョンに至るまでのすべての削除行と追加行を適用し,それ以降のバージョンをすべて無視することによって,ファイルの任意のバージョンを復元することができます。
RCS では,ファイル名にサフィックス
,v
を付加して RCS ファイルを識別します。
たとえば,attr,v
は,attr
という名前のソース・ファイルに対する RCS ファイルです。
SCCS では,ファイル名にプレフィックス
s.
を付加して s ファイルを識別します。
たとえば,s.attr
は,attr
という名前のソース・ファイルの s ファイルです。図 6-1
に,典型的なバージョン・コントロール・ファイルの内容を示します。
RCS ファイルおよび SCCS ファイルは,同じ種類の情報を含んでいますが,その構成方法は異なります。
図 6-1: バージョン・コントロール・ファイルの内容
バージョン・コントロール・ファイルの各リビジョンには,バージョン識別番号が割り当てられます。 SCCS では,この番号は SID と呼ばれます。 SCCS の識別番号には,最高 4 つの要素を含むことができます。 RCS には,その他の要素も規定されています。 最初の 2 つの要素は,そのリリース内のリリース番号とレベル番号であり,3 番目と 4 番目の要素には,ファイルの分岐バージョンに対する同じ項目,すなわちリリース番号とレベル番号 (分岐およびシーケンスと呼ばれる) を示します。6.3 節を参照してください。 リリース識別番号は 1 から始まります。 レベルの識別番号は,.1 から始まり,.1 ずつ増加します。 つまり,ファイルの最初のバージョンは 1.1,2 番目のバージョンは 1.2,というようになります。6.3 節の図 6-4 に,1 つのファイルのデルタに付けられるシーケンス番号を示します。
バージョン・コントロール・ライブラリは,1 つのプロジェクトのバージョン・コントロール・ファイルがすべて保存されるディレクトリです。 RCS と SCCS には,ライブラリからファイルを取り出す場合に,2 人のユーザが同一ファイルに同時にアクセスすることを防止するロック機構があります。 ファイル・ロックについての詳細は,この節以降で説明します。
通常,使用するシステムによりライブラリの名前は
RCS
または
SCCS
になります。
図 6-2
と図 6-3
は,プロジェクトのメイン・ディレクトリの下に,RCS ライブラリまたは SCCS ライブラリが配置された場合に,プロジェクトのディレクトリ・ツリーがどのようになるかを示します。
図 6-2: 典型的な RCS ライブラリ
図 6-2
は,3 つの RCS ファイルを示しています。
ファイルを編集するためにライブラリからチェックアウトする場合は,図の
attr
ファイルに例示されるように,RCS はすべてのデルタを相互に関連付けて,指定されたバージョンのコピーを取り出します。
RCS は,RCS ファイルを編集して,ファイルをチェックアウトした人の名前を挿入します。
この情報は
$Locker$
キーワードに保存されます。
RCS のキーワードの使用方法についての詳細は,6.5.2 項を参照してください。
RCS が SCCS と異なる点は,RCS がチェックイン時に強制的にファイルをロックするということです。 2 人以上のユーザが 1 つのファイルをチェックアウトできますが,最初にチェックアウトした (ロックを保持している) 人だけが,そのファイルをライブラリにチェックインすることができます。 リビジョンがロックされても,読み取り,コンパイルなどのためにチェックアウトすることはできます。 ロックを行うことによって,一度に 1 人の開発者だけしか次の更新ファイルをチェックインできないように設定できます。 すなわち,ロックを行うと,ロックした人 (ファイルを最初にチェックアウトした人) 以外がチェックインすることを防止します。
RCS ファイルがプライベートのファイルで,そのファイルにリビジョンを行っているユーザが他にいない場合は,RCS の完全ロック機能を解除することができます。
ファイルがチェックインされる際に,RCS は,ユーザの名前を
$Locker$
キーワードから取り去ります。
完全ロックが解除されると,ファイルの所有者は,チェックイン時にロックする必要がなくなります。
ただし,他のユーザは必要です。
次のコマンドを実行して,完全ロックの解除と設定ができます。
% rcs -U filename
および
% rcs -L filename
ファイル・ロックについての詳細は,6.5.3 項,6.5.5 項,および
co
(1)図 6-3: 典型的な SCCS ライブラリ
図 6-3
には,SCCS ライブラリ内の,3 つの s ファイルと
p.attr
という名前のその他のファイルを示しています。
編集を行うためにライブラリからファイルをチェックアウトする場合は,図の
attr
ファイルで例示されているように,SCCS は,すべてのデルタを相互に関連付けて,指定されたバージョンのコピーを取り出します。
SCCS は,p ファイルと呼ばれるロック・ファイルも作成します。
別のユーザが同じファイルを編集するためにチェックアウトしようとすると,SCCS はファイルが編集中であることを報告し,他のユーザのアクセスを拒否します。
p ファイルには,ファイル名にプレフィックスとして英字
p
が付加されます。
ファイルがライブラリにチェックインされると,SCCS は p ファイルを削除します。
6.3 ファイルの複数バージョンの管理
通常,ファイルのバージョンは,直線的に進化します。 つまり,現在のバージョンは 1 つしかありません。 この場合,ファイル識別番号は,2 つの要素で構成され,「.1」ずつ増加します。 つまり,ファイルに割り当てられる最初のバージョン番号は 1.1 であり,たとえば 8 番目は 1.8 になります。
並行してプロジェクトが行われ,同じプログラムを基本として新しいバージョンを開発している場合は,同じバージョン・コントロール・ファイルを使用することができます。 いろいろなバージョンが 1 つのライブラリ中にあるので,ツリー構造が分岐します。 たとえば,2 つのチームがファイルまたはモジュールの最新のリビジョンから別々なバージョンの開発を始めると仮定します。
2 つの開発の流れが継続されるため,図 6-4
に示すように,デルタのツリー構造は複雑なものになります。
図 6-4: バージョン・コントロール・ファイルのツリー構造
分岐の 1 つからファイルを取り出したり,編集したりするためには,その分岐番号を指定する必要があります。図 6-4 には,(1.1,1.2,および 1.3 などのリビジョン番号を含む) 主幹部とその分岐からなるバージョン・コントロール・ファイルのツリー構造が示されています。 図のデルタ番号の最初の 2 つの要素は,分岐元のバージョン番号を反映しています。 次の 2 つの要素は,新しい要素のバージョン番号を反映しています。
例として,2 つの開発チームが 1.2 のリビジョン番号を持つファイルで作業を行っていると仮定します。 RCS と SCCS のどちらであっても,最初にファイルをアクセスしたチームに番号 1.3 を割り当てます。 バージョン・コントロール・システムは,2 番目にアクセスしたチームに番号 1.2.1.1 のデルタを作成します。 このデルタは,番号 1.2 から分岐する最初のデルタなので,バージョン番号の後ろ 2 つの要素は 1.1 になります。
2 つのバージョンが開発されるにつれて,どちらのバージョンからでも分岐を作成することは可能です。 たとえば,リビジョン番号 1.2.1.4 の作成後に,リビジョン番号 1.2.1.3 から新しいファイルを分岐することができます。
RCS と SCCS の分岐についての詳細および個々の例については,6.5.5 項と
6.6.5 項を参照してください。
6.4 バージョン・コントロール・ライブラリの作成
開発プロジェクトで使用するバージョン・コントロール・システムを選択した後,RCS ファイルまたは SCCS ファイルを格納するためのディレクトリを作成する必要があります。 開発プロジェクトのサイズや複雑さによっては,ディレクトリおよびソース・ファイルの所有権と保護の設定についてシステム管理者に助言を求めることも必要になるでしょう。
ディレクトリをセットアップする際に,ディレクトリの所有権を
rcs
または
sccs
のユーザ ID に設定すると,rcs
または
sccs
以外のユーザがディレクトリに書き込むことを防止するようなパーミッションを設定できます。
この方法により,RCS または SCCS だけがライブラリ内のファイルを直接変更できるため,セキュリティは向上します。
sccs
コマンドを実行する場合は,図 6-3
に示すように,ライブラリのディレクトリは
SCCS
という名前でなければなりません。
ライブラリのディレクトリが
SCCS
という名前でない場合は,sccs
コマンドに
-d
オプションを付けて,ライブラリのファイルをアクセスする必要があります。
SCCS のオプションについては,表 6-8
を参照してください。
RCS では,ディレクトリ名は
RCS
でなければなりません。
それ以外の場合は,RCS ファイルに完全なパス (絶対パスまたは相対パス) を指定する必要があります。
6.5 RCS の使用方法
以降の項では,RCS の次の機能について説明します。
RCS システムは,テキスト・ファイルのバージョン・コントロールのタスクを補助する,1 組の UNIX コマンドのセットを提供します。 それは,生産および開発の両方の環境で使用されるために設計されているため,柔軟性とファイル・アクセスの制御に優先順位が置かれています。 生産環境の場合は,アクセス制御によって更新時の矛盾を検出したり,変更の重複を防止することができます。 変更が頻繁に起こる開発環境の場合は,さほど厳密な制御は必要ないため,個々のプロジェクトのニーズに合わせて容易に制御を変更することができます。
RCS システムは,1 組の独立したコマンドのセットで構成されています。表 6-2
に,提供されている RCS コマンドをリストします。
使用可能なコマンド・オプションについての詳細は,該当するリファレンス・ページを参照してください。
表 6-2: RCS コマンド機能の要約
コマンド | 機能 | |
ci |
リビジョンのチェックイン。 作業ファイルの内容を,対応する RCS ファイルの新しいリビジョンとして保存する。 | |
オプション | 機能 | |
-u
または
-l |
これらのオプションのいずれかを使用すると,チェックイン時に作業ファイルは削除されない。 | |
-r |
チェックインするファイルにリビジョン番号を割り当てる。 | |
-k |
チェックインされたファイル内の識別マーカを検索し,新しいリビジョンを割り当てる。 | |
co |
リビジョンのチェックアウト。 リビジョン番号,日付,著者,および状態の属性に応じてリビジョンを検索する。 常に識別マーカ (キーワード) を展開する。 | |
オプション | 機能 | |
-l |
ファイルのチェックアウト時にリビジョンをロックし,複数のユーザが同じファイルに作業を行った場合の変更の重複を防止する。 | |
ident |
ファイルから識別マーカを取り出し,プリントする。
識別マーカ (キーワード) は常に
co
によって展開される。 |
|
rcs |
RCS ファイル属性の変更。 変更は管理者が行わなければならない。 アクセス・リストの変更,ファイルのロック属性の変更,状態属性と文字によるリビジョン番号の設定,記述の変更,およびリビジョンの削除を行う。 リビジョンが削除できるのは,その他の分岐の起点となっていない場合のみ。 | |
オプション | 機能 | |
-L |
完全なファイル・ロック・モードを設定する。 これは,RCS ファイルの所有者が,チェックイン時に RCS ファイルをロックしなければならないことを意味する。 省略時の設定はシステム管理者が決定する。 | |
-U |
不完全なファイル・ロック・モードを設定する。 これは,ファイルの所有者が,チェックイン時にファイルをロックする必要がないことを意味する。 省略時の設定はシステム管理者が決定する。 | |
rcsclean |
作業ディレクトリを整理する。 チェックアウトされたが,変更が行われなかった作業ファイルを削除する。 | |
rcsdiff |
コマンドを使用して,2 つのリビジョンを比較し,その違いをプリントする。 比較されるリビジョンのうちの 1 つはチェックアウトされているものでもかまわない。 このコマンドは,変更内容の検索に有効である。 | |
rcsfreeze |
構成を凍結する。 すべての RCS ファイルの指定されたリビジョンに,同一名で,文字によるリビジョン番号を割り当てる。 このコマンドは,構成の正確な記録に有効である。 | |
rcsmerge |
共通の祖先に基づいて,2 つのリビジョン,rev1 および rev2 をマージする。 3 つのファイルの比較は,行の 1 部分に対して,3 つのリビジョンがすべて同じか,2 つのリビジョンが同じか,あるいは,3 つのリビジョンがすべて違うかを判断することによって行われる。 重複する変更内容にはフラグを立て,ユーザに報告する。 | |
オプション | 機能 | |
-p |
マージしたファイルの結果を標準出力にプリントする。 このオプションを指定しないと,マージした結果のファイルは作業ファイルに重ね書きされる。 | |
rlog |
ログ・メッセージを読み取る。 RCS ファイルのログ・メッセージおよびその他の情報をプリントする。 たとえば,RCS ファイル名,作業ファイル名,ヘッド (主幹部の最新のリビジョン番号),省略時の分岐,アクセス・リスト,ロック,シンボル名,リビジョン番号,および記述テキスト。 | |
オプション | 機能 | |
-h |
RCS ファイル名,作業ファイル名,ヘッド,省略時の分岐,アクセス・リスト,ロック,シンボル名,およびサフィックスのみをプリントする。 | |
-t |
-h
オプションでプリントする情報の他に,記述テキストもプリントする。 |
ci
コマンドを実行すれば,新しいファイルをライブラリに置くことができます。
次の例では,ライブラリの親ディレクトリにユーザがいて,attr
ファイルをライブラリに追加すると仮定しています。
% ci attr RCS/attr,v <---- attr enter description, terminateted with single '.' or end of file: >> Orpheus Authoring Tools attr command >> . initial revision: 1.1 done
ci
コマンドは,RCS ファイル
attr,v
を作成し,その中に
attr
をリビジョン 1.1 として保存します。ci
コマンドは,記述を入力するように要求してきます。
記述とは,ファイルの内容の概要です。
これ以降にチェックイン・コマンドを実行すると,ログ・エントリの入力を要求してきます。
ログ・エントリとは,変更内容の要約のことです。
次に示すように,1 回の操作で複数のファイルを入力することができます。
% ci attr docbld dcb.ch-intro
RCS システムでは,ファイル識別情報を提供するためのキーワードまたは ID マーカをソース・ファイルに含めるための構文を提供しています。 ID マーカは,キーワードをドル符号 ($) で囲んだものです。 RCS ライブラリからファイルを取り出す際に,RCS は,キーワードをファイル名またはリビジョン番号などの適切な情報に置き換えて展開します。
RCS では,ファイルの任意の場所にキーワード・マーカをリテラル文字列またはコメントとして使用し,リビジョンを確認することができます。
たとえば,テキスト・ファイル内にマーカ
$
Header$
を置いた場合は,(co
コマンドを実行すると) RCS は,このキーワードを次のような情報に置き換えます。
$
Header: full_pathname/filename rev_num yyyy/mm/dd HH:mm:ss author state $
表 6-3
に,RCS キーワードとそれに対応する値をリストします。
表 6-3: RCS ID キーワード
キーワード | 説明 |
$Author$ |
当該リビジョンをチェックインしたユーザのログイン名。 |
$Date$ |
当該リビジョンをチェックインした日付と時刻。 |
$Header$ |
RCS ファイルの完全パス名,リビジョン番号,日付,著者,状態。 ロックされている場合は,ロックしたユーザ名からなる標準のヘッダ。 |
$Id$ |
RCS ファイル名がパスなしで示される以外は標準ヘッダと同じ。 |
$Locker$ |
当該リビジョンをロックしているユーザのログイン名。 ロックしていない場合は空。 |
$Log$ |
チェックイン時に出力されるログ・メッセージ。
先頭に RCS ファイル名,リビジョン番号,著者,および日付を含むヘッダが付く。
既存のログ・メッセージは置換されず,代わりに,新しいログ・メッセージが
$Log:...$
の後に挿入される。 |
$RCSfile$ |
パスなしの RCS ファイルの名前。 |
$Revision$ |
当該リビジョンに付けられたリビジョン番号。 |
$Source$ |
RCS ファイルの完全パス名 |
$State$ |
rcs
または
ci
の
-s
オプションによって当該リビジョンに付けられた状態。 |
ident
コマンドは,オブジェクト・ファイルやダンプなど,どのようなファイルからでもキーワードを見つけて,抽出することができます。ident
コマンドは,指定したファイル内で,パターン
$keyword
:...$
の出現をすべて検索します。
たとえば,C プログラム
myfile.c
に,次の情報が含まれていると仮定します。
char resid [] = "$
Header: Header information$"
ident
コマンドを実行すると,次のようにプリントされます。
myfile.c : $
Header: Header information$"
RCS
でのキーワードの使用についての詳細は,
co
(1)6.5.3 RCS ライブラリからのファイルの取り出し
RCS ファイルから,特定のファイルのリビジョンを取り出すには,co
コマンドを実行して RCS ライブラリからそのリビジョンをチェックアウトします。co
コマンドは RCS ファイルから当該リビジョンを取り出して,それを対応する作業ファイルに保存します。
RCS ファイルのリビジョンは,ロックして,あるいはロックせずにチェックアウトすることができます。 リビジョンをロックすると,更新の重複を防止できます。 編集以外 (たとえば,参照または実行) のためにファイルをチェックアウトする場合は,リビジョンをロックする必要はありません。 編集のためにチェックアウトし,後でチェックインをするリビジョンは,必ずロックしておかなければなりません。 次に例を示します。
% cd /usr/projects/dcb_tools % co -u attr RCS/attr,v ----> attr revision 1.6 (unlocked) done
このコマンドは,RCS ファイルの最新のバージョンの (キーワード情報を含んだ) コピーを作成し,現在のディレクトリ (この例では
/usr/projects/dcb_tools
) に取り出します。-u
オプションを付けると,RCS はファイルをロックしません。
任意の古いバージョンのコピーを取り出すには,-r
オプションを使用します。
たとえば,現在のバージョンが 1.8 のファイルのバージョン 1.5 を取り出す場合は,次のようなコマンドを実行します。
% cd /usr/projects/dcb_tools % co -r1.5 attr RCS/attr,v ----> attr revision 1.5 done
1 回の
co
コマンドで,複数のファイルを取り出すこともできます。
たとえば,次のように実行します。
% co attr unstamp RCS/attr,v ----> attr revision 1.5 done RCS/unstamp,v ----> unstamp revision 1.2 done
6.5.4 編集済みファイルの RCS ライブラリへのチェックイン
1 つまたは複数の編集済みファイルを戻すには,ci
コマンドを実行します。
このコマンドは,各作業ファイルの内容を,対応する RCS ファイルに置き換えます。
通常,RCS では,ライブラリに再配置されるリビジョンが元のファイルと異なっているかどうかをチェックし,ユーザに警告します。
また,ci
コマンドはチェックイン時に作業ファイルを削除してしまうため,チェックアウト処理を暗黙に実行するために作業ファイルを保持するには,-l
オプションまたは
-u
オプションを使用します。
現在のリビジョンをセーブした後に編集を続ける場合は,-l
オプションまたは
-u
オプションとともに
ci
コマンドを使用してください。
6.5.5 複数バージョンを持つファイルの操作
6.3 節では,バージョン・コントロール・システムの分岐概念の概要を説明しています。 この項の解説では,RCS が複数ファイルの分岐を処理する例をいくつか示します。
RCS は,ファイル・リビジョンをデルタのツリー構造として配置します。 リビジョン・ツリー構造の各ファイルに含まれる情報は,リビジョン番号,チェックイン時刻および日付,著者の識別情報,ログ・エントリ,状態,ならびに実際のテキストです。 これらのファイル属性はすべて,リビジョンがライブラリにチェックインされる際に決定されます。 状態属性は,リビジョンの状態を示します。 チェックイン時には「テスト中」に設定されますが,後で確定またはリリース済に変えることもできます。
ci
コマンドは,通常は 1.1 の番号を割り当てられたルート・リビジョンを持ったリビジョン・ツリー構造を作成します。
リビジョン番号を明示しない限り,ci
は 1.2,1.3,1.4 というように直前のリビジョンのレベル番号を増分して新しいリビジョン番号を付けます。
新しいリリースを開始するには,次の 2 つのコマンドのいずれかを使用します。
% ci -r2.1 unstamp
または
% ci -r2 unstamp
このアクションによって,新しいリビジョンに 2.1 という番号が割り当てられます。-r
オプションを付けずにファイルをライブラリにチェックインすると,ファイルのリビジョンが新しくなるにつれ,自動的に 2.2,2.3 のように番号が割り当てられます。
2 つの開発チームが
unstamp
コマンドのリビジョン番号 1.2 から始まる別々なリリースで開発を始めると仮定します。
この時点では,両方のチームとも,-l
オプションを付けて
co
コマンドを実行し,最新リビジョンをチェックアウトすることができます。
次のように入力します。
% co -l unstamp
ファイルの編集後に,最初のチームは,ci
コマンドを使用してファイルをチェックインすることができます。
RCS は,新しいリビジョン番号が 1.3 であるという警告を発します。
次の例のようになります。
% ci unstamp RCS/unstamp,v <---- unstamp new revision 1.3; previous revision 1.2 enter log message: (terminate with a ^D or single '.') >> Changed defaults check. >> . done
2 番目のチームが同じアクションでファイルをチェックインしようとすると,RCS は次のメッセージを表示します。
RCS/unstamp,v <----- unstamp ci error: no lock set by user-name
この時点で,2 番目のチームは,次のように
ci
コマンドを使用して分岐を作成することができます。
% ci -r1.3.1 unstamp
このアクションの結果,リビジョン番号 1.3.1.1 を持つ分岐が作成されます。 この分岐に沿って開発を続けるために,2 番目のチームは,現在の分岐のリビジョン番号を,以降に行うすべてのファイルのチェックアウトに使用する必要があります。 次に例を示します。
% co -r1.3.1.1 unstamp
RCS での新しい分岐の作成は,ci
コマンドを使用して実行されます。
特定の分岐に従って開発を続けるには,co
コマンドで
-r
オプションを使用します。
ここまでの解説では,RCS が各ファイルのリビジョンを処理する方法について説明しました。
RCS システムでは,ファイルをグループまたはセット単位で指定して作業することもできます。
RCS でのファイル構成についての詳細は,6.5.8 項を参照してください。
6.5.6 RCS ファイルの差異の表示
rcsdiff
コマンドを実行すると,RCS ファイルのバージョン間の差異を確認できます。
rcsdiff
コマンドは,diff(1)
を実行して,任意の RCS ファイルの 2 つのリビジョンを比較します。
たとえば,(1.8,編集すると 1.9 になる)
attr
ファイルの最新バージョンと直前のバージョン (1.7) の差異を見つけるには,次のコマンドを実行します。
% rcsdiff -r1.7 attr ===================================== RCS file: RCS/attr,v retrieving revision 1.7 diff -r1.7 attr 31d30 <# and is version linked to the docbld command
attr
ファイルのバージョン 1.3 と 1.4 の差異を確認する場合は,次のコマンドを実行します。
% rcsdiff -r1.3 -r1.4 attr ==================================== RCS file: RCS/attr,v retrieving revision 1.3 retrieving revision 1.4 diff -r1.3 -r1.4 5a6 < uts=-04 --- > uts=-05
rlog
コマンドを実行して,ファイルのリビジョン・ヒストリを調べます。
たとえば,rlog
コマンドによって次のような詳細な情報が提供されます。
% rlog unstamp RCS file: RCS/unstamp,v; Working file: unstamp head: 1.2 branch: locks: ; strict access list: symbolic names: comment leader: "# " total revisions: 2; selected revisions: 2 description: unstamp source file _________________________ revision 1.2 date: 92/06/09 15:51:16; author:gunther; state:Exp; lines added/del: Fixed copyright notice _________________________ revision 1.1 date: 92/06/09 15:49:16; author:gunther; state:Exp; Initial revision
rlog
コマンドを実行した場合に,使用可能となる情報のタイプと量に注意してください。
RCS は,各 RCS ファイルに対して次の情報をプリントします。
RCS ファイル名
作業ファイル名
ヘッド (主幹部の最新のリビジョン番号)
省略時の分岐
アクセス・リスト
ファイルのロック
シンボル名 (ある場合)
サフィックス
リビジョンの総数
プリントされたリビジョンの番号
記述テキスト
この情報の後には,各分岐ごとに,選択されたリビジョンのエントリが逆の年代順で続いています。
オプションを指定せずに入力した場合,rlog
は,選択したファイルの情報をすべてプリントします。rlog
コマンドの出力を制限するためのオプションの使用方法についての詳細は,
rlog
(1)6.5.8 構成の制御の概念
RCS での構成とは,ファイル・リビジョンのグループまたはセットを指します。 その中では,各リビジョンは,異なるファイル・リビジョンのグループから構成されています。 ファイル・リビジョンは,一定の基準に従って選択 (チェックアウト) されます。 次の選択基準に基づいて RCS ライブラリからファイルのセットをチェックアウトすることができます。
省略時の選択
省略時の設定では,RCS は,すべてのファイルの中で最新のリビジョンを選択します。 たとえば,次のコマンドを使用すると,ライブラリ中の全 RCS ファイルの省略時の分岐から,最新のリビジョンを検索します。
% co *,v
リリースに基づく選択
リリース番号または分岐番号を指定して,リリースまたは分岐の中の最新のリビジョンを選択することもできます。 たとえば,次のコマンドは,各 RCS ファイルからリリース番号が 2 である最新のリビジョンを検索します。
% co -r2 *,v
状態および作成者による選択
RCS では,状態属性に従ってファイルを選択することができます。 たとえば,リリース番号が 2 で,状態属性が「リリース済」の最新リビジョンを検索するには,次のコマンドを入力します。
% co -r2 -sReleased *,v
-w
オプションを使用すると,作成者によってリビジョンを選択することもできます。
日付による選択
日付によってリビジョンを選択することもできます。
システム全体のリリースが完了し,現在の時刻は 6 月 15 日 2:00 p.m であると仮定します。
次のコマンドは,-d
オプションで切り捨てる日付を 6 月 15 日と指定し,そのリリースのファイルをすべてチェックアウトします。
% co -d "June 15,2:00 pm" *,v
名前による選択 (シンボル名を使用)
RCS では,リビジョンと分岐にシンボル名を付けることができます。 大規模なシステムの開発プロジェクトでは,すべてのグループから適切なリビジョンをすべて集めるには,1 種類のリリース番号または日付では不十分なことがあります。
たとえば,1 つのサブシステムのリリース 2 を別のサブシステムのリリース 10 と結合する必要があると仮定します。
おそらく,これらのリビジョンの作成日は異なっています。
したがって,この場合は 1 種類のリビジョン番号または日付を
co
コマンドに指定しても,適切なリビジョンを得ることはできません。
文字によるリビジョン名を使用すると,この問題を回避できます。
これは,各 RCS ファイルが,数字のリビジョン番号にマップされたシンボリック名のセットを持つことができるためです。
たとえば,ファイル
attr,v
のリリース番号 2 およびファイル
unstamp,v
のリビジョン番号 10.2 に,シンボル名として IFT2 を設定したと仮定します。
この場合,次のように 1 回の
co
コマンドで,attr,v
からリリース 2 の最新リビジョンを,unstamp,v
からリビジョン 10.2 の最新リビジョンを検索することができます。
% co -rIFT2 attr,v unstamp,v
rcsfreeze
コマンドを実行すれば,特定の構成に含まれる一連の RCS ファイルに,文字によるリビジョン名を割り当てることができます。
主幹部にある各 RCS ファイルの最新リビジョンに,固有の文字によるリビジョン名を付けるには,新しいバージョンをチェックインするたびに
rcsfreeze
コマンドを実行します。
RCS
ファイルにシンボル名を付ける際についての詳細は,
rcsfreeze
(1)
大規模なソフトウェア開発プロジェクトでは,1 つのコマンドですべてのリビジョンを取り出す能力が,構成管理を,組織的かつ効率的な作業にしてくれます。
SCCS システムは,いくつかの独立したコマンドで構成されています。
それぞれのコマンドは,単独で使用することもできます。
sccs
コマンドは統合されたインタフェースです。
最も一般的な SCCS コマンドの使用方法を簡素化したもので,複数のコマンドの動作を結合して,いくつかの機能を追加しています。
ただし,個々のコマンドのすべての機能をサポートしているわけではありません。
sccs
コマンドの形式には必ず,キーワード
sccs
と,edit
のような関数の名前が含まれます。
その後ろに,オプションと処理するファイルの名前を指定します。表 6-4
は
sccs
コマンドです。
表の後の項で,これらのコマンドのいくつかについて詳しく説明します。
この解説では,必要な場合を除きコマンド・オプションが省略されています。
また,独立した下位レベル・コマンドが存在するコマンドについては,表中で示されています。
個々のすべてのコマンドの一覧は,表 6-9
に示されています。
使用方法についての詳細な情報,およびオプションについての説明は,各リファレンス・ページを参照してください。
表 6-4: sccs コマンド機能の要約
コマンド名 | 下位レベル | 説明 |
admin |
あり | s ファイルの作成または既存の s ファイルの特性の変更。 |
check |
なし | 編集中のファイルおよび編集しているユーザ名の報告。info
と異なり,check
は,意味のある終了ステータスを返す。
また,編集中のファイルがない場合は,レポートを表示しない。 |
clean |
なし | 指定された s ファイルから復元可能なすべてのファイルを,ディレクトリから削除する。 |
create |
なし | g ファイルを削除せずに s ファイルを作成する。 |
deledit |
なし | delta
を行った後,同じファイルに対して
edit
を行う。 |
delget |
なし | delta
を行った後,同じファイルに対して
get
を行う。 |
delta |
あり | 編集済みのg ファイルをライブラリにチェックインさせる。 その際,変更内容およびヒストリを記録する。 p ファイルを削除する。 |
diffs |
なし | 編集のためにチェックアウトされた g ファイルと,s ファイルから復元された古いバージョンを比較する。 |
edit |
なし | 編集のために s ファイルをチェックアウトする。 g ファイルを再作成してユーザのディレクトリに置く。 p ファイルを作成する。 |
fix |
なし | 最新のデルタを削除し,再編集のために g ファイルを取り出す。rmdel
に続けて
edit
を入力することと同じ。 |
get |
あり | g ファイルの再作成。
通常は,編集以外の目的に使用する。
編集のために g ファイルを再作成する場合は,通常,sccs
get
-e
と同じ機能を持つ
sccs
edit
コマンドを実行する。 |
help |
あり | コマンド名または SCCS メッセージ番号を指定すると,その項目についての情報を表示する。
独立したコマンド形式は,sccshelp
である。
各 SCCS メッセージには,識別コードがある。
たとえば,「no ID keywords」メッセージの識別コードは
cm7
である。sccs
help
cm7
コマンドは,このエラーについての記述を表示する。sccshelp
delta
コマンドは,delta
コマンドの構文ダイアグラムを返す。 |
info |
なし | 編集中のファイルと編集しているユーザの名前を報告する。 |
print |
なし | 指定した 1 つまたは複数のファイルのリビジョン・ヒストリを表示する。 さらに,各行の先頭に ID 情報を追加した SCCS ファイルを表示する。 |
prs |
あり | 指定した 1 つまたは複数のファイルのリビジョン・ヒストリを表示する。 |
prt |
なし | prs
と同じ。 |
rmdel |
あり | 指定の s ファイルの指定の分岐から最新のデルタを削除する。 |
sccsdiff |
あり | s ファイルの 2 つのバージョンを比較する。 s ファイル名は,明示的に指定しなければならない。 |
tell |
なし | 編集中のファイルについての報告をする。info
と異なり,ファイル名だけが報告される。 |
unedit |
なし | g ファイルの編集を打ち切る。
p ファイルを削除して,他のユーザがチェックアウトできるように s ファイルを解放する。
作業ディレクトリに g ファイルが存在する場合は,sccs
unedit
は,それを削除し,s ファイルに対して
get
コマンドを実行する。
g ファイルが存在しない場合は,get
コマンドは実行されない。unget
コマンドと同じ。 |
what |
あり | ファイル中の SCCS ID パターンを探索し,それに続くテキストを表示する。 |
sccs create
コマンドを実行して,新しいファイルをライブラリに配置することができます。
次の例では,現在ライブラリの親ディレクトリから
attr
ファイルをライブラリに追加すると仮定します。
% sccs create attr attr: 1.1 141 lines
指定するファイル名にプレフィックス
s
を含めてはなりません。
SCCS では自動的に適用されるためです。
1 回の操作で複数のファイルを入力することができます。 次に例を示します。
% sccs create attr docbld dcb.ch-intro
ライブラリに s ファイルを作成した後に,sccs create
コマンドは元のファイル名にプレフィックスとしてコンマを付加します。
たとえば,attr
は
,attr
になります。
このアクションは,キーワード (もしあれば) を展開しないままで,元の g ファイルを保持します。
さらに,SCCS では,get
コマンドを実行してファイルのコピーを取り出すことができます。
取り出されたバージョンは,配布することができます。
次の構文を使用して,sccs admin -i
コマンドでライブラリにファイルを挿入することもできます。
sccs admin -i
[
[path/
]
]
[input-file
]
[
[path/
]
]
[s-filename
]
次に例を示します。
% sccs admin -iunstamp unstamp
path/input-file
には,入力ファイルを指定します。
このファイル名のいかんにかかわらず,s ファイル名は,「s.s-filename
」となります。-i
オプションと
path/input-file
の間にはホワイト・スペースを入れないでください。
s-filename
にプレフィックス
s
を付けてはなりません。
SCCS では自動的に適用されます。admin -i
コマンドを実行すると,元の g ファイル名の書き換えと,キーワードを展開したバージョンの取り出しを行いません。admin
コマンドの使用方法についての詳細は,6.6.8 項を参照してください。
短いシェル・スクリプトで複数のファイルを入力するには,admin -i
オプションを使用します。
次のコマンド行の例は,csh
で実現されます。
% foreach x (attr docbld dcb.ch-intro) ? sccs admin -i$x $x ? end
SCCS システムでは,ソース・ファイルに ID キーワードを指定するための構文を用意しており,ファイル識別情報を提供します。
ID キーワードは,パーセント記号 ( %
) で囲まれた単一の英字で構成されます。
編集以外の目的でファイルを取り出す場合は,SCCS は,各 ID キーワードを SID またはファイル名などのような適切な情報に置換して展開します。表 6-5
は SCCS ID キーワードのリストです。
表 6-5: SCCS ID キーワード
キーワード | 説明 |
%B% |
取り出された g ファイルの分岐番号。 |
%C% |
g ファイルの現在の行の番号。 プログラムから出力されたメッセージを確認することを目的としている。 |
%D% |
get
コマンドにより取り出された g ファイルの取り出し日付。
フォーマットは,yy/
mm/
dd。 |
%E% |
デルタの作成日。
フォーマットは,yy/
mm/
dd。 |
%F% |
s ファイルのファイル名。 |
%G% |
デルタの作成日。
フォーマットは,mm/
dd/
yy。 |
%H% |
get
コマンドにより取り出された g ファイルの取り出し日付。
フォーマットは,mm/
dd/
yy。 |
%I% |
取り出されたファイルに適用された最も高い SID。 |
%L% |
取り出された g ファイルのレベル番号。 |
%M% |
現在のモジュール (ファイル) 名。
たとえば,prog.c 。 |
%P% |
s ファイルの完全パス名。 |
%Q% |
s ファイルの
q
フラグの値。 |
%R% |
取り出された g ファイルのリリース番号。 |
%S% |
取り出された g ファイルのシーケンス番号。 |
%T% |
get コマンドにより取り出された g ファイルの取り出し時刻。
フォーマットは,hh:
mm:
ss。 |
%U% |
デルタの作成時刻。
フォーマットは,hh:
mm:
ss。 |
%W% |
%Z%%M%
[Tab]
%I%
の簡易入力。 |
%Y% |
admin
コマンドで設定される
t
フラグの値のための位置保持記号。
SCCS では無効。 |
%Z% |
what
コマンドが検出できるようにするための文字列
@(#)
に展開される位置保持記号。 |
SCCS は,ファイル上の任意の場所にある ID キーワードを処理します。
SCCS
what
コマンドの目的は,ファイル中の展開されたID キーワードを検出して表示することです。what
コマンドは,文字列
@(#)
を含む行を検索し,それらの行を表示します。
文字列
@(#)
は,%Z%
キーワードまたは
%W%
簡易入力キーワードで生成されます。what
コマンドの例を,次に示します。
% what /usr/bin/attr /usr/bin/attr: attr 1.8 of 4/15/92
この例で表示された行は,シェル・スクリプトの一部で,次のようにコード化されています。
# SCCSID: %Z%%M% %I% of %G%
ファイルに ID キーワードが含まれていない場合,SCCS はファイルがライブラリに配置された時点と,そのファイルが取り出された時点に,このことを報告します。
ファイルに
i
フラグを設定すると,ID キーワードが含まれていないということが致命的なエラーになるように指定することができます。
ファイル・フラグについての詳細は,6.6.8 項を参照してください。
i
フラグの目的は,delta
コマンドが,展開されたキーワードを持つ,あるいはキーワードがない g ファイルと s ファイルとをマージするのを防ぐことです。
6.6.3 SCCS ライブラリからのファイルの取り出し
SCCS ライブラリからファイルを取り出すのには 2 つの理由があります。 配布など編集以外で使用するため,および編集のためです。
ファイルは,直線的に変化するバージョン・ヒストリとして編集することも,あるいは,分岐したツリー構造を作成して編集することもできます。
同じ s ファイルに,複数の平行したバージョンが一緒に保存される場合のツリー構造の作成方法を,6.6.5 項に説明します。
6.6.3.1 編集以外の目的でのファイルの取り出し
編集以外の目的で SCCS ファイルを取り出す場合は,sccs get
コマンドを実行します。
次に例を示します。
% cd /usr/projects/dcb_tools % sccs get attr 1.8 126 lines
このコマンドは,展開された SCCS キーワード (表 6-5
を参照) を持つ,s ファイルの最新のバージョンのコピーを作成し,それを現在のディレクトリ (この例では
/usr/projects/dcb_tools
) に置きます。
任意の古いバージョンのコピーを取り出すには,-r SID
オプションを使用します。
たとえば,現在バージョン 1.8 であるファイルのバージョン 1.5 を取り出すには,次のコマンドを実行します。
% cd /usr/projects/dcb_tools % sccs get -r1.5 attr 1.5 128 lines
SCCS ファイルのより複雑なツリー構造の管理については,6.6.5 項を参照してください。
-p
オプションを使用すると,ファイルを取り出した後で,暗黙に s ファイルと同じ名前の g ファイルを作成する代わりに,標準出力に書き込むことができます。
詳細については,
get
(1)6.6.3.2 編集のためのファイルの取り出し
ファイルを編集する場合は,sccs edit
コマンドでライブラリからファイルをチェックアウトします。
たとえば,次のようにします。
% sccs edit attr 1.8 new delta 1.9 126 lines
sccs edit
コマンドは,SCCS キーワードを展開しないで s ファイルの最新のバージョンのコピーを作成し (表 6-5を参照),編集用として現在のディレクトリに格納します。sccs edit
コマンドはまた,編集用にファイルをチェックアウトしたユーザを識別する p ファイルも作成します。
sccs info
コマンドを実行すれば,ファイルの状態をチェックすることができます。
次に例を示します。
% sccs info unstamp: is being edited: 1.4 1.5 gunther 99/03/07 10:42:19
get -e
コマンドを実行して,編集のためにファイルを取り出すこともできます。
6.6.3.3 複数ファイルおよび新しいリリースの管理
1回の
get
コマンドまたは
edit
コマンドで,複数のファイルを取り出すことができます。
次に例を示します。
% sccs get attr unstamp SCCS/s.attr: 1.8 126 lines SCCS/s.unstamp: 1.2 55 lines
1 つまたは複数のファイル名の代わりに
SCCS
という名前を指定した場合は,SCCS はライブラリのすべての s ファイルを取り出します。
ファイルの新しいリリースを作成するには,sccs edit
コマンドに
-r
オプションを指定して,新しいリリース番号を取り出します。
たとえば,次のコマンドでは
docbld
ファイルのリリース 2 が作成されます。
% sccs edit -r2 SCCS SCCS/s.docbld: 1.50 new delta 2.1 1042 lines SCCS/s.dcb_defaults: 1.50 new delta 2.1 63 lines SCCS/s.dcb_diag.sed: 1.50 new delta 2.1 188 lines
6.6.4 編集済みファイルの SCCS ライブラリへのチェックイン
ライブラリに編集済みファイルを再配置するには,
sccs delta
コマンドを実行します。
SCCS はコメントの入力を求めます。
次に例を示します。
% sccs delta attr Comments? (^D to end) Changed defaults check. Now looks only for "flc=" [Ctrl/D] 1.9 4 inserted 4 deleted 124 unchanged
1 つまたは複数のファイル名の代わりに
SCCS
という名前を指定した場合には,SCCS は,ライブラリのすべての s ファイルに対して
delta
コマンドを実行します。
この機能は,同様の指定をした
edit
コマンドと一緒に使用すると,セットのうちいくつかのファイルだけを編集し,セット全体を同じバージョンで保存する場合に有効です。
SCCS は一度だけコメントを要求し,各ファイルに同じコメントが適用されます。
sccs delget
コマンドおよび
sccs deledit
コマンドは,delta
を実行し,get
または
edit
の各処理を実行します。
6.6.5 複数バージョンを持つファイルの操作
6.3 節に,バージョン・コントロール・システムの分岐概念の概要を説明しました。 この項では,ファイルの複数バージョンの分岐が SCCS によって処理される例を,いくつか示します。
2 つの開発チームが,unstamp
ファイルの SID1.2 を分岐点として,別々のバージョンで開発を始める場合を例にします。
分岐を使用するためには,sccs admin -fb
コマンドを次のように実行します。
% sccs admin -fb unstamp
最初のチームは,次のような
edit
コマンドを実行して,バージョン 1.3 を作成します。
% sccs edit unstamp 1.2 new delta 1.3 55 lines
2 番目のチームは,次のような
edit -b
コマンドを実行して,分岐を作成します。
% sccs edit -b unstamp 1.2 new delta 1.2.1.1 55 lines
現在,unstamp
ファイルのツリー構造が,主幹部と番号 1.2.1,1.2.2,1.3.1 の分岐からなると仮定します。
配布のために,分岐 1.2.2 から最新バージョンを取り出すには,次のコマンドを実行します。
% sccs get -r1.2.2 unstamp 1.2.2.1 55 lines
SCCS ツリー構造がより複雑になると,取り出すデルタをあらかじめ知る必要があるため,編集用の最新のデルタを確実に取り出すことが困難になります。sccs get
コマンドと
sccs edit
コマンドに
-t
オプションを付けて使用すると,SID によらず,確実に最新のデルタを指定することができます。
sccs edit -i
コマンドでマージしたいバージョンを指定すると,分岐した SCCS ファイルを主幹部にマージして戻すことができます。
たとえば,次のコマンドは,1.2.1.1 から 1.2.1.3 の範囲のすべてのデルタを含んだ,unstamp
コマンドのバージョン 1.5 を作成します。
指定された変更内容がすべて含まれるように,各デルタは,相互の関連付けが行われます。
% sccs edit -i1.2.1.1-1.2.1.3 unstamp Included: 1.2.1.1 1.2.1.2 1.2.1.3 1.4 new delta 1.5 55 lines
SCCS ファイルのバージョン間の差異を確認することができます。
ファイルの形式によって,sccs diffs
コマンドまたは
sccsdiff
コマンドのいずれかを使用します。
sccs diffs
コマンドは,g ファイルを,s ファイルの指定されたバージョンと比較します。
たとえば,attr
ファイルの最新バージョン (1.8 であり,編集後 1.9) と直前のバージョン (1.7) の差異を検出する場合には,次のコマンドを実行します。
% sccs diffs -r1.7 attr ------- attr ------- 31d30 <# and is version-linked to the docbld command
attr
ファイルのバージョン 1.3 と 1.4 の差異を確認する場合には,次のコマンドを実行します。
% sccs sccsdiff -r1.3 -r1.4 SCCS/s.attr < uts=-04 --- > uts=-05
この例のように,s ファイルは,パス名で指定することができます。
このように設計されているため,SCCS ライブラリのあるディレクトリに移動しなくても,任意のディレクトリからこのコマンドを実行することができます。
6.6.7 SCCS ファイルのリビジョン・ヒストリの報告
sccs prs
コマンドを実行して,ファイルのリビジョン・ヒストリを確認することができます。
次に例を示します。
% sccs prs unstamp SCCS/s.unstamp: D 1.2 99/03/20 11:23:36 gunther 2 1 00000/00006/00055 [1] MRs: [2] COMMENTS: [3] Fixed copyright notice D 1.1 99/03/19 09:39:11 gunther 1 0 00061/00000/00000 MRs: COMMENTS: date and time created 99/03/19 09:39:11 by gunther
上の例のコールアウトで示された,D
,MRs
,および
COMMENTS
の各キーワードは,SCCS キーワードの一部です。
sccs help
コマンドを実行すると,キーワードおよびその意味のリストが表示されます。
D
キーワードは,デルタ情報を示します。gunther
(プログラマのユーザ名) の後の 2 つの数字は,新旧のリビジョン・レベルを示します。
スラッシュで区切られた数字はそれぞれ,追加行,削除行,変更なしの行の数を示します。
[例に戻る]
キーワード
MRs
によって,主リビジョンが表示されます。
ここで,主リビジョンとは,ファイルの SID の最初の要素のことです。
[例に戻る]
COMMENTS
キーワードは,自由な書式での履歴情報を記録する場所を提供します。
[例に戻る]
sccs get -m
コマンドを実行してファイルを取り出すと,プレフィックスとして各行に SID 番号が付加されたファイルが取り出されます。
この方法で取り出されたファイルは,取り出したバージョンで,どのデルタがどの行を生成しているかを示します。
デルタは,新しいデルタによって重ね書きされている可能性があることに注意してください。
特定の変更を見るためには,-r
オプションを使用する必要があります。
6.6.8 管理機能の実行
sccs admin
コマンドには,いくつかの管理用機能があります。
各機能は,表 6-6
に示されているように,admin
コマンドに付けるオプションで指定します。
注意
システム管理者は,管理者だけが使用できるように
admin
コマンドの許可を設定することができます。
オプション | 説明 |
-auser s-file |
指定されたユーザを,指定の s-file を変更できるユーザのリストに追加する。 ユーザ名はグループ ID でもよい。 その場合,そのグループのユーザすべてが追加される。 |
-dflag s-file |
s-file の,指定されたフラグをオフに (削除) する。 |
-euser s-file |
指定されたユーザを,指定の s-file を変更できるユーザのリストから削除する。 ユーザ名はグループ ID でもよい。 その場合,そのグループのユーザはすべて削除される。 |
-fflag s-file |
s-file の,指定されたフラグをオンにする。 |
-h
s-file |
指定の s-file の構造をチェックし,新しく計算されたチェックサムと,s-file に保存されているチェックサムを比較する。 このオプションは,事故による損傷,および,SCCS コマンド以外で直接 SCCS ファイルを変更した際に起こる損傷の発見に役立つ。 |
-iinput-file
s-file |
input-file
を初期内容として,SCCS/s.s-file
を作成する。sccs
create
と異なり,admin
-i
は,g-file
の名前の変更や,s-file
のコピーを取り出さない。g-file
は,未変更のまま現在のディレクトリに格納される。 |
-mMR-list s-file |
変更要求 (MR) 番号のリストを指定すると,初期デルタの作成理由として SCCS ファイルに挿入される。 |
-ns-file |
空の s-file を作成する。 |
-rSID s-file |
s-file を作成する際の初期の SID を指定する。 |
-tfile s-file |
file の内容を s-file に追加する。 その際,s-file には,追加されたテキストとしてのフラグを立てる。file が省略された場合は,そのようにして追加されたテキストは削除される。s-file とともに確実に配布したいドキュメントを指定する場合に有効である。 |
-y"comment" s-file |
delta
コマンドの動作と同じ方法で,初期デルタにコメント・テキストを挿入する。-y
オプションを使用しない場合,省略時のコメントとして,ファイルの作成日付と時刻,およびユーザ名を含んだ 1 行が挿入される。 |
-z
s-file |
ファイルが破損した場合に,s-file のチェックサムを再計算する。 |
注意
val
コマンドとadmin -z
コマンドを使用して,破損した s ファイルを修復することは危険です。 システム管理者または指定の SCCS ライブラリ管理者に依頼してください。
admin -f
オプションと
admin -d
オプションのフラグは,表 6-7
で示されているとおりです。
表 6-7: admin コマンドのフラグ
フラグ | 説明 |
b |
edit
コマンドに
-b
フラグを使用すると,分岐が作成される。 |
cSID |
SID
を
get
-e
コマンドが使用できる最も高位のデルタとして指定する。 |
dSID |
get
コマンドまたは
edit
コマンドで省略時の SID を使用することを指定する。 |
fSID |
SID
を
get
-e
コマンドで使用できる最も低位のデルタとして指定する。 |
i |
「no Id keywords」エラー・メッセージを,警告ではなく致命的エラーにする。 |
j |
2 人以上による s-file の同時編集を可能にする。 |
lSID
[,SID..
] |
指定の
SID
が編集用として取り出されないようにロックする。-fla
フラグですべてのデルタをロックできる。-d
フラグで指定のデルタのロックを解除できる。 |
mname |
get
コマンドでキーワードが展開された場合,出現する
%M%
キーワードをすべて
name
で置換する。
省略時の名前は,s
プレフィックスのない
s-file
名。 |
n |
delta
コマンドは,デルタが新しいリリースで作成された場合に,すべてのスキップされたリリースを空のデルタとして作成する。
たとえば,デルタ 5.1 をデルタ 2.7 の後に作成すると,リリース 3 と 4 は空になる。
その結果作られた空のデルタは,分岐デルタを作り上げる際の起点とすることができる。
このフラグを使用しない限り,省略されたリリースは
s-file
に現れない。 |
q"text" |
get
コマンドでキーワードが展開された場合,出現するすべての
%Q%
キーワードを
text
に置換する。 |
ttype |
get
コマンドでキーワードが展開された場合,出現するすべての
%Y%
キーワードを
type
に置換する。 |
v[program
] |
デルタは,デルタを作成する理由としての変更要求 (MR) 番号の入力を要求する。program
名は,MR 番号の妥当性チェック・プログラムの名前を指定する。
詳細は,
delta (1) |
たとえば,次のコマンドは,既存のテキスト・ファイルの内容を使用して,SID 2.1 で始まる
s-file
を作成します。
さらに,コメントを付けて識別できるようにしています。s-file
の
i
フラグが設定されています。
このコマンドでは,結果の
s-file
を,ユーザの作業ディレクトリの下の SCCS ライブラリに格納します。
% sccs admin -iunstamp -fi -r2 -y "Initial release" unstamp
この例では,元のファイルは破壊されません。
6.6.9 SCCS オプションの使用
sccs
コマンドでは,表 6-8
に掲載したオプションがサポートされています。
これらのオプションには,表に例示されているような,SCCS 機能コマンドのキーワードが含まれている必要があります。
オプションと引数の間にはスペースを入れてはなりません。
表 6-8: SCCS コマンド・オプション
オプション | 説明 |
-ddirname |
SCCS ライブラリの親として使用するディレクトリを指定する。 現在の作業ディレクトリが親でなくても,SCCS ライブラリにアクセスできる。 次に例を示す。 % pwd /usr/users/gunther % sccs -d/usr/src/dcb_tools get attr 1.8 126 lines
|
-ppath |
path
を,指定したファイルのパス名の最終要素に付加する。
省略時,SCCS は
SCCS
を付加する。-d
の例では,指定されたパスが
/usr/src/dcb_tools/SCCS/s.attr
になる。
SCCS ライブラリが
SCCS
という名前でない場合は,パスの構成要素を変更するために,-d
オプションを使用する。 |
-r |
sccs
UID に変更せずに,ユーザの実際の UID で実行する。
セキュリティ上,SCCS は,通常,SCCS ライブラリのファイルの所有権を,sccs
UID に属するように設定する。
自分のライブラリを管理するためだけに SCCS を使用する場合に,このオプションは有効である。
つまり,-r
オプションを使用すると,特別の許可がなくても
SCCS
ディレクトリを作成でき,SCCS は,ユーザの UID を使用してそのディレクトリ内のファイルを変更する。 |
表 6-9
に,独立した SCCS コマンドを簡単に説明します。
これらのコマンドのうちのいくつかは,sccs
コマンドではサポートされていません。
詳細については,該当するコマンドのリファレンス・ページを参照してください。
表 6-9: 独立した SCCS コマンド
コマンド名 | sccs コマンドによるサポート | 説明 |
admin |
あり | s-file の作成,または既存の s-file の特性の変更。 |
cdc |
なし | デルタに関連するコメントを変更する。 |
comb |
なし | s-file の 2 つ以上の連続したデルタを 1 つのデルタに統合する。 デルタを結合することによって,必要な記憶領域を減少できる。 |
delta |
あり | 編集済みの g-file をライブラリにチェックインさせ,変更内容とヒストリを記録する。 p ファイルを削除する。 |
get |
あり | s-file
の指定されたバージョンを取り出す。
編集またはコンパイルを行うためにファイルのコピーを取得する場合には,このコマンドを実行する。
編集する場合は,get
-e
コマンドを実行する。
その場合は,編集用の
s-file
をチェックアウトし,g-file
を再作成し,それを現在のディレクトリに置いて,p ファイルを作成する。 |
prs |
あり | 指定の s-file のリビジョン・ヒストリを表示する。 |
rmdel |
あり | 指定の s-file の指定された分岐から最新のデルタを削除する。 |
sccsdiff |
あり | s-file の 2 つのバージョンを比較する。s-file 名を明示して指定する必要がある。 |
sccshelp |
なし | 診断メッセージまたは SCCS コマンド名の説明を出力する。 |
unget |
なし | p ファイルを削除して,展開された ID キーワードを持つコピーへ
g-file
を置き換え,前回
get
-e
コマンドを実行したときの影響を削除する。sccs
unedit
コマンドと同じ。 |
val |
なし | s-file
のチェックサムを計算して,その結果が,ファイルに保存されているチェックサムと一致するかどうかを確認する。sccs
admin
-z
コマンドとこのコマンドを一緒に使用すると,破損したファイルを修復できる。 |
what |
あり | ファイル内の SCCS ID パターンを探索して,それに続くテキストを表示する。 このコマンドを実行すると,(SCCS 制御の下に置かれている) プログラムを構成するソース・バージョンの識別情報を検出できる。 |
注意
val
コマンドとadmin -z
コマンドを使用して,破損した s ファイルを修復することは危険です。 システム管理者または指定の SCCS ライブラリ管理者に依頼してください。
表 6-10 は,RCS および SCCS の動作の簡単な比較と,類似した機能を実行するコマンドです。 各コマンドの使用方法についての詳細は,リファレンス・ページを参照してください。
タスク | RCS コマンド | SCCS コマンド |
元になるファイルから新しいファイルを作成する。 | ci
file |
sccs create
file
sccs admin -isfile gfile
admin
-ipath/sfile gfile |
展開されたキーワードを持つファイルのコピーを取り出す。 | co -u
file |
sccs get
file
get
file |
展開されていないキーワードを持つファイルのコピーを取り出す。 | sccs get -k
file
get -k
file |
|
ファイルをチェックアウトする。 | co -l
file |
sccs edit
file
get -e
file |
編集済みのファイルをチェックインする。 | ci
file |
sccs delta
file
delta
file |
ファイルのリビジョン・ヒストリを表示する。 | rlog
file |
sccs prs
file
prs
file |
ファイル・リビジョン間の差異を確認する。 | rcsdiff -rrev file |
sccs diffs -rrev file
sccsdiff -rrev
-rrev file |
ファイル・リビジョンをマージする。 | rcsmerge -rrevs file |
sccs edit -irevs file |
確認情報を検索する。 | ident |
sccs
what
what |
管理用のタスクを実行する。 | rcs |
admin |
現在のディレクトリを整理する (変更されていないファイルを削除する)。 | rcsclean |
sccs
clean |