プログラミングユーティリティ

ファイルのチェックインおよびチェックアウト

以下のサブコマンドは、バージョンを取り出したり変更をチェックインする際に使用します。

編集用のファイルをチェックアウトする : sccs edit

ソースファイルを編集するには、まず sccs edit を使用してファイルをチェックアウトする必要があります (sccs edit コマンドは、sccs get-e オプションを使用する場合と同じ結果になります)。

SCCS は、取り出したバージョンのデルタ ID と、変更をチェックインしたときに割り当てられる新しいデルタ ID を返します。

$ sccs edit program.c
1.1
new delta 1.2
87

取り出したファイルは、テキストエディタを使用して編集できます。ファイルの書き込み可能なコピーがある場合は、sccs edit はエラーメッセージを表示します。つまり sccs edit は、他のユーザーにもファイルへの書き込み権がある場合は、そのファイルを上書きしません。

新しいバージョンをチェックインする : sccs delta

ファイルをチェックアウトして編集が完了したら、sccs delta を使用して変更をチェックインできます。

ファイルをチェックインすることを、デルタを作成するということもあります。更新をチェックインする前に、コメントを入力するプロンプトが表示されます。コメントとして、変更についての要約を記述します。

$ sccs delta program.c
comments?

コメントは、後でそのファイルを使用する時のために、わかりやすい内容にする必要があります。

バックスラッシュ (¥) と復帰改行を入力することによって、コメントを 2 行以上に渡って記述することができます。

$ sccs delta program.c
comments? corrected typo in widget(), ¥ 
null pointer in n_crunch()
1.2
5 inserted 
3 deleted
84 unchanged

SCCS は、新しいバージョンの SID と、挿入された行数、削除された行数、変更されていない行数を表示します。変更された行数は、削除された行と挿入された行の合計になります。SCCS は、作業用のコピーを削除します。sccs get を使用して、読み取り専用バージョンを取り出すことができます。

バージョンをチェックインする際には注意が必要です。少量の編集を行うたびにデルタを作成していくと、デルタが多くなりすぎる場合があります。逆に長期間ファイルをチェックアウトしたままにすると、他のユーザーがそのファイルを編集できないので不便になる場合があります。

一般に使用されるモジュールをコンパイルまたはインストールする前に、変更したすべてのファイルをチェックインしてください。手順は以下のとおりです。

バージョンを取り出す : sccs get

ファイルの最新バージョンを取得するには、以下のコマンドを使用します。

sccs get filename

以下に例を示します。

$ sccs get program.c
1.2
86

この例では、program.c を取り出し、バージョン番号および取り出された行数が表示されています。取り出された program.c のコピーは、読み取り専用になっています。

SCCS は、ファイルをチェックアウトしない限り新しいデルタを作成しないため、この取り出した読み取り専用のコピーは変更 (編集) しないでください。取り出した読み取り専用のコピーをそのまま強制的に変更すると、他のユーザーが次に sccs get または sccs edit をそのファイルに対して実行したときに、そのファイルに加えた変更が無効になる場合があります。

保留中の変更を確認する : sccs diffs

チェックアウトしたバージョンの変更で、まだチェックインされていないものを、保留中の変更と呼びます。ファイルの編集中に、sccs diffs を使用して保留中の変更を確認できます。diffs サブコマンドは、diff(1) を使用して、作業用 (編集中) のコピーとチェックインされた最新のバージョンとを比較します。

$ sccs diffs program.c
------ program.c ------ 
37c37 
<        if (((cmd_p - cmd) + 1) == l_lim) { 
--- 
>        if (((cmd_p - cmd) - 1) == l_lim) { 

diff コマンドのほとんどのオプションを使用することができます。diff-c オプションを呼び出すには、sccs diffs-C という引数を使用します。

保留中の変更を削除する : sccs unedit

sccs unedit は、保留中の変更を取り消します。これは、ファイルの編集を間違ってしまったときに編集を最初からやり直す場合に便利です。unedit は、チェックアウトしたバージョンを削除し、履歴ファイルのロックを解除し、チェックインされている最新のバージョン (最後にチェックインしたバージョン) の読み取り専用コピーを取り出します。unedit を使用すると、ファイルをチェックアウトしなかったのと同じ状態になります。編集を再開するには、sccs edit を使用してファイルをもう一度チェックアウトします (「書き込み可能なコピーを修復する : sccs get -k -Gも参照してください)。

deltaget を組み合わせて実行する : sccs delget

sccs delget は、delta および get の動作を組み合わせて一度に実行します。sccs delget は、変更をチェックインし、 チェックインした新しいバージョンの読み取り専用コピーを取り出します。ただし、SCCSdelta の実行中にエラーが発生した場合は、get は実行されません。ファイル名のリストを (複数のファイルを一度に) 処理する際は、delget は可能なすべての delta を実行し、delta でエラーが発生した場合は、すべての get の処理を実行しません。

deltaedit を組み合わせて実行する : sccs deledit

sccs deledit は、delta を実行した後に edit を実行します。バージョンをチェックインした後、すぐに編集を再開することができます。

SID を指定してバージョンを取り出す : sccs get -r

-r オプションを使用すると、取り出す SID を指定できます。

$ sccs get -r1.1 program.c
1.1
87 

日時を指定してバージョンを取り出す : sccs get -c

必要なデルタの SID は不明でも、チェックインした日付ならわかるという場合があります。以下の形式で -c オプションと日時を指定して、その日時以前にチェックインされた最新のバージョンを取り出すことができます。

-cyy [mm [dd [hh [mm [ss ]]]]]

以下に例を示します。

$ sccs get -c880722120000 program.c
1.2
86

この例は、1988 年 7 月 22 日午後 12 時の時点で最新のバージョンを取り出します。年以外のフィールドは省略できます (デフォルトでは現在になります)。また、指定された箇所に区切りとして句切り文字を挿入できます。前述のコマンドは、以下のように書き換えることができます。

sccs get -c"88/07/22 12:00:00" program.c

注 -

2000 年問題について : SCCS は日付を表わす書式として 2 けたで年を表します。Sun は、年として 69 〜 99 の値が指定されている場合は 1969 〜 1999、00 〜 68 の場合は 2000 〜 2068 にそれぞれ解釈するという、X/Open グループにより提案された仕様 (XCU5) を採用しています。


書き込み可能なコピーを修復する : sccs get -k -G

sccs get -k -Gfilename は、新しいバージョンをチェックアウトせずに、テキストの書き込み可能なコピーを取り出し、-G で指定されたファイル名で保存します。このコマンドは、diff コマンドとテキストエディタを使用して、損傷した作業中のコピーを置き換えたりまたは修復したりする際に便利です。