  The RCS MINI-HOWTO
  Robert Kiesling, kiesling@terracom.net
  $Id: RCS-HOWTO.sgml,v 1.4 1997/08/14 15:09:56 rak Exp rak $
  伊佐冶  哲, isaji@mxu.meshnet.or.jp

  このドキュメントではLinux  RCS(GNU Revision Control System)の基本的な
  インストールと使い方を取り扱っています。RCSを操作する上で必要な
  diff(1)とdiff3(1)のインストールも取り扱っています。 LDPのHOWTOシリーズ
  に関する"general copyright notice"に従う限り、このドキュメントは全部/
  一部を自由に改変できます。詳しくはCOPYRIGHTファイルを見て下さい。ご不
  満、提案、間違いなどありましたらkiesling@terracom.netまで。できるだけ
  今後のドキュメントに反映したいと思っています。
  ______________________________________________________________________

  目次

  1. RCSの概要
  2. 必要なシステム
  3. ソースからRCSをコンパイルする
  4. アーカイブの作成と管理
  5. ci(1)とco(1)
  6. リビジョンヒストリー
  7. 作業ファイルにRCSデータを入れる
  8. RCSとemacs(1)バージョンコントロール

  ______________________________________________________________________

  1.  RCSの概要

  RCS(revision control system：リビジョン改訂コントロールシステム)は共有
  アクセスをコントロールします。これは主にソースコードモジュールを管理す
  るのに使われます。ドキュメントファイルのリビジョンの追跡にも役立ちま
  す。

       訳注：プログラムソースやドキュメントのバージョン管理/整備などに
             使われます。共同でプログラム開発を行ったりドキュメントを
             書くといった場合の重複を避けるのにも使われます。

  RCSはWalter F. Tichy氏とPaul Eggert氏によって書かれました。Linuxにポー
  トされている最新版はRCS Version 5.7です。これらは準公式、スレッド版も
  あります。このHOWTOの情報の多くはRCS manページを参考に書かれています。

  RCSは以下のプログラムから成ります(訳注：JM参照)。

     rcs(1)
        RCS ファイルの属性を変更します。rcs  は、新規に RCS ファイルを作
        成したり、 RCS ファイルの属性を変更したりすることができます。RCS
        ファイルは、複数のリビジョン、アクセスリスト、変更履歴、内容記
        述、制御属性からなります。 rcs は、実行したユーザが RCS ファイル
        のアクセスリストに登録されているか、アクセスリストが空であるか、
        ユーザが RCS ファイルの所有者であるか、スーパーユーザである
        か、-i オプションが指定されている場合にのみ実行できます。

        RCS 拡張子にマッチするファイル名は RCS ファイルであるとみなし、
        その他のファイル名はワークファイルであるとみなします。

     ci(1)とco(1)
        RCSアーカイブのチェックインとチェックアウトをします。

        o  co - (作成開始時に)RCS ファイルからリビジョンを取り出す

        o  ci - (作成終了時に)RCS ファイルに新たなリビジョンを追加する

     ident(1)
        ファイル内の RCS キーワードを読み出します。ident は、指定された
        ファイルがあればそのファイルから、指定がない場合には標準入力か
        ら、 $keyword:...$ というパターンを検索します。

        これらのパターンは、通常 RCS の co コマンドにより自動的に挿入さ
        れますが、手作業で入れることも可能です。オプション -q を指定する
        と、ファイル中にキーワードが発見できなくてもメッセージを出力しま
        せん。 identは、テキストファイルと同様にオブジェクトファイルにも
        使用することができます。

     rcsclean(1)
        RCSで管理されているファイルのうち不要なファイルを削除するプログ
        ラムです。

     rcsdiff(1)
        diff(1)を使って RCS で管理されているリビジョンを比較します。

     rcsmerge(1)
        ２つのRCSをひとつの作業ファイルにマージします(RCS ファイルのリビ
        ジョンを併合する)。

     rlog(1)
        RCSログメッセージ、その他関連情報を表示します。

  RCSによってアーカイブできるファイルは任意のフォーマットのテキストファ
  イルです。また、変更ファイルを生成するのに使われるdiffプログラムが 8
  ビットデータを操作するなら、バイナリファイルも扱うことができます。ファ
  イルは、ident(1)によって追跡を助けるために、オプション的に確認文字列を
  含むようになります。

  RCSはdiff(1)、diff3(3)ユーティリティをリビジョン間の変更ファイルを生成
  するのに使います。RCSアーカイブは各リビジョンの初期リビジョンから成り
  ます。ファイルはco(1)によってアーカイブをチェックアウトし、ci(1)によっ
  てアーカイブを編集そしてチェックインします。リビジョンがうまくいくと
  バージョンは1.2, 1.3, 1.4といった具合に連続して増えていきます。

  RCSにはアーカイブ保管用の他のオプションがありますが、アーカイブそれ自
  身は./RCSサブディレクトリに置かれます。

  RCSの概要についてはrcsintro(1)マニュアルページを参照して下さい。

  2.  必要なシステム

  RCSはリビジョン間のdiffファイルを生成するためにdiff(1) とdiff3(3)を使
  います。diffユーティリティはシステムにインストールされている必要があり
  ます。RCSをインストールする時はこれらがあるかどうかチェックしておいて
  下さい。

  プレコンパイルされたdiffutilsは

  ftp://sunsite.unc.edu/pub/Linux/utils/text/diffutils-2.6.bin.ELF.tar.gz

  とミラーサイトで入手できます。 diff(1)等をソースからコンパイルする場合
  は：

  ftp://prep.ai.mit.edu/pub/gnu/diffutils-2.7.tar.gz

  とそのミラーサイトからソースを入手して下さい。

  プレコンパイルされたバイナリをインストールする場合はELFライブラリが必
  要です。詳しくは「ELF-HOWTO」を参照して下さい。

  3.  ソースからRCSをコンパイルする

  RCSバージョン5.7の配布ソースを入手します。

  ftp://sunsite.unc.edu/pub/Linux/devel/vc/rcs-5.7.src.tar.gz

  やそのミラーサイトにあります。ソースディレクトリにアーカイブを展開した
  らシステムにあうようにRCSを設定する必要があります。これはソースディレ
  クトリのconfigure スクリプトで行われます(一番始めに実行して下さい)。こ
  れによりMakefile とシステムに合ったconf.shが作られます。その後

          make install

  としてバイナリを構築します。ここでsuでrootになっておいて下さい。これで
  正しいディレクトリにバイナリがインストールされます。

  4.  アーカイブの作成と管理

  rcs(1)プログラムはアーカイブの生成と属性の修正を行います。rcs(1)オプ
  ションをまとめたものはrcs(1)のマニュアルページにあります。

  アーカイブを作るもっとも簡単な方法は、カレントディレクトリでmkdir RCS
  として./RCSディレクトリを作り、

          rcs -i (作業ファイル名)

  コマンドでアーカイブを初期化することです。これは作業ファイル名に,vがつ
  いた./RCS/(作業ファイル名),v と言う名前のアーカイブ(訳注：これがRCS
  ファイルです)を作り、アーカイブを記述するテキストメッセージをリクエス
  トします。しかしアーカイブにリビージョンを置くことはしません。以下のコ
  マンドを使ってアーカイブのロックをonにしたりoff にしたりできます。onは

          rcs -L (作業ファイル名)

  で、offは

          rcs -U (作業ファイル名)

  です。注意：

  o  「ロックされている」：ファイルの更新ができる

  o  「ロックされていない」：ファイルの更新はできない．

     アーカイブアクセスを操作したりフォーマットの設定、リビージョン番号
     をセットするためのオプションが他にもあります。rcs(1)のマニュアル
     ページに書かれています。

  5.  ci(1)とco(1)

  ci(1) と co(1)はRCSアーカイブのファイルをチェックするコマンドで
  す。ci(1)コマンドはアーカイブのin と out 両方をチェックするのにも使わ
  れます。簡単なコマンドフォームでは、ci(1) と co(1)は作業ファイルの名前
  だけを指定します：

          ci (作業ファイル名)

  そして

          co (作業ファイル名)

  コマンドフォーム

          ci -l (作業ファイル名)

  はロック可能なファイルをチェックインされ、

          co -l (作業ファイル名)

  は自動的に実行されます。つまりci -lはロック可能のファイルをもう一度
  チェックします (訳注：-lオプションはチェックインした後、またすぐにロッ
  クして取り出すためのオプションです)。

       訳注：co における -l オプションはロックして取り出すことを意味します。
          ロックすると 次に自分が(作業ファイル)をチェックインするまで他人は
          (作業ファイル)をロックできなくなります。

          ci -u (作業ファイル名)

  これはアーカイブ中のファイルをチェックします。そしてロック不可もチェッ
  クします。全ての場合においてログメッセージで表示されます。

  RCSアーカイブがないとci(1)はアーカイブも作ります。

  リビジョンを特定しない場合はci(1)はアーカイブのロックされた最新リビー
  ジョンのバージョンを増やし、改訂された作業ファイルに追加します。またす
  でにあるブランチ(branch)のリビージョンを特定すると、すでにあるリビー
  ジョンよりも高い番号を付けます。

       訳注：変更されているとci コマンドは変更分の差分を取り、新しい
             リビジョンへのコメント入力を求めます。コメントを入力す
             ると、新しいリビジョンとしてRCSディレクトリにチェックイン
             されます。

  ci(1)は存在しないブランチのリビジョンを指定すると新しいブランチを生成
  します。詳しいことはci(1)とco(1)のmanページを参照して下さい。

  ci(1) と co(1)は相互に作用する(あるいは作用しない) さまざまなオプショ
  ンがあります。同様に詳しいことはci(1) とco(1)のmanページを参照して下さ
  い。
  6.  リビジョンヒストリー

  rlog(1)プログラムはアーカイブファイルとストアされている各リビジョンの
  ログについての情報を提供します。コマンドは

          rlog (作業ファイル)

  のように使います。これはファイルのバージョン履歴、改訂の作成日付、作者
  のuserids、ファイルを管理している人などを表示します。アーカイブ属性と
  改訂パラメータを指定することができます。

  7.  作業ファイルにRCSデータを入れる

  co(1)はRCSデータベースのキーワードリストを管理します。このデータベース
  は作業ファイルがチェックアウトされる時に展開されます。ドキュメント中に
  あるキーワード$Id$はファイル名、改訂番号、チェックアウトした日付、著
  者、改訂の事情、ロッカー(置き場所)から成る文字列に展開されます。キー
  ワード$Log$はドキュメントのリビジョン履歴ログに展開されています。

  [訳注：作業ファイルにRCSデータを入れるには

          co -l (作業ファイル)

  でチェックアウトしたファイルに

  ______________________________________________________________________
   $Id: RCS.sgml,v 1.1 1998/02/28 08:54:44 isaji Exp isaji $
  ______________________________________________________________________

  を書き入れます(SGMLなどだったら<!--  〜 -->でコメントしたりしておきま
  す)。そしてco -l とすると$Id$ の後に

  ______________________________________________________________________
   $Id: RCS.sgml,v 1.1 1998/02/28 08:54:44 isaji Exp isaji $
  ______________________________________________________________________

  といった情報が入ります。その他情報を入れるキーワードはmanページから引
  用すると(日本語manページからです)：

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

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

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

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

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

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

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

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

     $Revision$
        リビジョン番号

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

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

  となっています(この注はJMを参考/引用しました)]

  これらおよび他のキーワードはRCSアーカイブの基準検索として使われます。
  詳細はident(1) manページを参照して下さい。

  [訳注：ident - ファイル内の RCS キーワードを読み出すコマンドです。
  ident は、テキストファイルと同様にオブジェクトファイルにも使用すること
  ができ、どのようなバージョンのソースから作られているかわかります。たと
  えば、以下の C 言語プログラム f.c で、

  ______________________________________________________________________
        char rcsid[] = "$Id$";
  ______________________________________________________________________

  あるいは

  ______________________________________________________________________
        static char rcsid[] = "$Id$";
  ______________________________________________________________________

  として、f.c が f.o にコンパイルされているなら、

                ident  f.c  f.o

  と実行すると、

           f.c:
               $Id: f.c,v 1.2 1993/07/24 02:51:17 jtc Exp $
           f.o:
               $Id: f.c,v 1.2 1993/07/24 02:51:17 jtc Exp $

  といった出力をします]

  8.  RCSとemacs(1)バージョンコントロール

  [訳注：Cソースを書いたりHTMLを編集したりすることの多いなかで muleと使
  うと便利です]

  emacs(1)のバージョンコントロール機能はRCSのフロントエンドとして使えま
  す。この情報はLinux配布パッケージで提供されているGNU Emacs バージョン
  19.34で確認しています。RCSで登録されているファイルをemacs(1)で編集する
  時はvc-toggle-read-onlyコマンド(デフォルトでC-x C-qにバインドされてい
  ます)を使います。 EmacsはRCSログにログメッセージをタイプするバッファを
  開きます。ログエントリの入力を終了する時はC-c C-cとして下さい。チェッ
  クイン処理で入力、続行を終了します。

  RCSで厳密なファイルロックを選択した時はemacs(1)によって編集されるファ
  イルを再ロックしなければなりません。バッファメニューモードの %コマンド
  でEmacsのバージョンコントロールでファイルをチェックアウトすることがで
  きます。より詳しいことはGNU EmacsマニュアルとEmacs infoページを参照し
  て下さい。

  [訳注：RCSで管理されているSGMLファイルをmuleで開くと mule画面のメ
  ジャーモードSGML、マイナーモードRCS:1.0になっていると思います(これが出
  ない時はカレントでRCSディレクトリを作っていなくまだRCSで管理されていま
  せん)。

  ______________________________________________________________________
  -かんなE.:--%%-Mule: Coffee.sgml        (SGML RCS:1.0)--L1--Top---------
  ______________________________________________________________________

  これがRCSモードです。C-x C-qでチェックイン、チェックアウトを切替えられ
  ます(ミニバッファの辺りで交互に%%、-- あるいは**が切り替わっていま
  す)。変更後はC-c C-cでライトプロテクトしておきます。]

  [ 日本語訳：伊佐冶  哲, isaji@mxu.meshnet.or.jp

  訳文についての感想、訂正などありましたらご連絡下さい]

