Last modified: 2001年5月25日

RCS FAQ

RCS に関するよくある質問について。


1 管理の開始
1.1 ファイルをRCSで管理しはじめたい
2 Check-in
2.1 check-inしたらファイルがなくなってしまった
2.2 check-in したらファイル名の最後に ',v' がつくファイルができた
2.3 RCSファイルの最後につく ',v' は何の略か?
2.4 check-in した後も編集を続けたい
2.5 check-in した後もファイルを参照したい
2.6 ./RCS ディレクトリを作らないで check-in してしまった
2.7 check-in するときに リビジョン番号を指定したい
2.8 変更していないファイルは普通 check-in できない。強制的に check-in させたい。
2.9 変更していないファイルを指定したリビジョン番号で check-in したい
2.10 ログメッセージをコマンドラインで指定したい。
2.11 ロックしないで check-out したファイルを更新した。このファイルを check-in したいがロックされていないので、書き込めない。
2.12 check-in するリビジョン番号にシンボル名をつけたい。
2.13 check-in の時に、ログメッセージを入力した後 "ci: ファイル名: Permission denied" というエラーがでた(Windows)。
3 Check-out
3.1 RCSファイルから作業ファイルを取り出したい。
3.2 指定したリビジョン番号のリビジョンを取り出したい。
3.3 指定したシンボル名の与えられているリビジョン番号のリビジョンを取り出したい。
3.4 check-in した日付を指定して check-out したい。
3.5 作業ファイルがあっても強制的に check-out したい。
3.6 ファイルではなく標準出力に check-out したい。
3.7 check-out しようとしたら "writable ファイル名 exists; remove it? [ny](n):"と表示された。
3.8 check-out の際 check-out 先 を指定したい。
4 Lock
4.1 一人で作業するのでロック機構を無効にしたい。
4.2 無効になっているロック機構を有効にしたい。
5 ブランチ
5.1 ブランチを作成したい。
5.2 1.3 のブランチを 1.3.1 にしたらリビジョンが 1.3.1.1 になってしまった。
6 キーワード
6.1 どんなキーワードがあるのか知りたい。
6.2 ファイル中の identification marker ($Id$) を取出したい。
6.3 Prologプログラム に $Id$ を組み込みたい。
6.4 TeX(LaTeX)ファイルに $Id$、$Revision$ を組み込みたい。
7 ログ
7.1 いままでのログメッセージをみたい。
8 Emacs と RCS
8.1 いま開いているバッファをRCSで管理しはじめたい。
8.2 Emacs でバージョン管理している時もファイルのバックアップを作成したい。
8.3 Emacs で実際に実行されているコマンドを知りたい。
8.4 ログメッセージのコーディングシステムを指定したい。
8.5 ChangeLog 作成時の名前、メールアドレスを変更したい。
9 その他
9.1 編集していない作業ファイルはとりあえず削除したい。
9.2 今編集中のファイルで check-out してからどこを変更したか忘れてしまった。またはどこを変更したか確認したい。
9.3 ファイル名を変更したい。

1 管理の開始


1. 1 ファイルをRCSで管理しはじめたい

test.txtをリビジョン管理するとする。

  1. test.txtのあるディレクトリに移動する。
  2. ./RCSディレクトリがなければ作成する(作成しなくても良い)。
    $mkdir RCS
  3. check-in する。
    $ci test.txt

test.txtは削除され./RCSディレクトリの下にtest.txtの情報を格納したtest.txt,vというファイルが作成される(./RCSディレクトリを作成していなかった場合はtest.txtのあったディレクトリにtest.txt,vが作成される)。


2 Check-in


2. 1 check-inしたらファイルがなくなってしまった

check-in すると作業ファイルは削除される。 しかしファイルの内容はRCSファイルに格納されているのでファイルの情報が失なわれてしまっているわけではない。 ファイルを取り出すにはcoコマンドを使う。


2. 2 check-in したらファイル名の最後に ',v' がつくファイルができた

これはリビジョングループを格納するRCSファイルというものである。 すべてのリビジョンや履歴情報などが格納されている。 管理しているファイルが不要になった場合を除いてこのファイルを削除してはならない。


2. 3 RCSファイルの最後につく ',v' は何の略か?

version の v。


2. 4 check-in した後も編集を続けたい

check-in すると作業ファイルは削除されてしまう。 しかし編集作業を続けたいときもある。 その場合はあらためて check-out すればよいのであるが若干面倒である。

$ci -l ファイル名

と -l オプションを指定すると

$ci ファイル名
$co -l ファイル名

としたのと同じ処理がなされる。


2. 5 check-in した後もファイルを参照したい

check-in すると作業ファイルは削除されてしまう。 しかし編集はしないけれどもコンパイルなどのためにファイルが読めるようにしておきたいこともある。 その場合はあらためて check-out すればよいのであるが若干面倒である。

$ci -u ファイル名

と -u オプションを指定すると

$ci ファイル名
$co ファイル名

としたのと同じ処理がなされる。


2. 6 ./RCS ディレクトリを作らないで check-in してしまった

問題ない。 その場合RCSファイルがカレントディレクトリに作成される。 もしも整理するために RCSファイルを RCS ディレクトリに移したければ ./RCSディレクトリを作成し RCSファイル(通常は ',v' で終わるファイル)を ./RCS に移動すればよい。


2. 7 check-in するときに リビジョン番号を指定したい

普通に check-in をするとRCSファイル中にある最新のレベル番号を 1 増やしたものが新しいリビジョンのリビジョン番号となる。

明示的に指定したい場合は -r オプションを指定する。

$ci -rリビジョン番号 ファイル名

2. 8 変更していないファイルは普通 check-in できない。強制的に check-in させたい。

-f オプションを指定することで強制的に check-in することができる。

$ci -f ファイル名

2. 9 変更していないファイルを指定したリビジョン番号で check-in したい

$ci -f -rリビジョン番号 ファイル名

2. 10 ログメッセージをコマンドラインで指定したい。

-m オプションで指定することができる。

$ci -mメッセージ ファイル名

2. 11 ロックしないで check-out したファイルを更新した。このファイルを check-in したいがロックされていないので、書き込めない。

ロックしていない RCSファイルに対して check-in しようとすると

ci: RCSファイル名: no lock set by ログイン名

というエラーメッセージが返される。

もし check-in したければ rcs -l でRCSファイルにロックをかけることができる。

$rcs -l ファイル名
$ci ファイル名

2. 12 check-in するリビジョン番号にシンボル名をつけたい。

$ci -nリビジョン番号につける名前 ファイル名

で新しいリビジョンのリビジョン番号にシンボル名をつけることができる。 ただしすでに同じ名前が利用されている時はつけることができない。 古いものに上書きしたい場合は

$co -Nリビジョン番号につける名前 ファイル名

とすれば新しくつけなおすことができる。


2. 13 check-in の時に、ログメッセージを入力した後 "ci: ファイル名: Permission denied" というエラーがでた(Windows)。

check-in の時に rcs は対象ファイルを削除しようとする。この時エディタなどで開いたままだったりすると、対象ファイルを削除できないためエラーが発生する。

この場合新しいリビジョンは格納されている。

開いていたファイルを編集してもよいが、RCSファイルにはロックはかかっていないことに注意。


3 Check-out


3. 1 RCSファイルから作業ファイルを取り出したい。

coコマンドで取り出すことができる。

$co ファイル名

ァイルを編集して後でまた check-in したい場合はロックをかけて check-out する。

$co -l ファイル名

3. 2 指定したリビジョン番号のリビジョンを取り出したい。

-r オプションでリビジョン番号を指定することができる。

$co -rリビジョン番号 ファイル名

とすると指定したリビジョン番号と同じか、それより小さい最新のリビジョンがとりだされる。


3. 3 指定したシンボル名の与えられているリビジョン番号のリビジョンを取り出したい。

-r オプションでシンボル名を指定すればよい。

$co -rシンボル名 ファイル名

3. 4 check-in した日付を指定して check-out したい。

-d オプションの後に以下のような文字列を指定することで可能である。

8:00 pm lt
4:00 AM, Jan. 12, 1990           default is UTC
1990-01-12 04:00:00+00           ISO 8601 (UTC)
1990-01-11 20:00:00-08           ISO 8601 (local time)
1990/01/12 04:00:00              traditional RCS
Thu Jan 11 20:00:00 1990 LT      output of ctime(3) + LT
Thu Jan 11 20:00:00 PST 1990     output of date(1)
Fri Jan 12 04:00:00 GMT 1990
Thu, 11 Jan 1990 20:00:00 -0800  Internet RFC 822
12-January-1990, 04:00 WET

3. 5 作業ファイルがあっても強制的に check-out したい。

-f オプションでできる。

$co -f ファイル名

で作業ファイルがある場合は check-out して上書きする。


3. 6 ファイルではなく標準出力に check-out したい。

-p オプションでできる。

$co -p ファイル名

で標準出力に check-out したリビジョンを出力する。


3. 7 check-out しようとしたら "writable ファイル名 exists; remove it? [ny](n):"と表示された。

チェックアウトしようとしたものと同じファイル名のファイルがすでに存在している。

y[return]

とすれば作業中のファイルは削除されてあたらしく作業ファイルが check-out される。

n[return]

とすれば check-out はされないで、もとのファイルが残る。

すでにあるファイルがロックなしで check-out し更新していないものであれば、このメッセージはでないで上書きされる。


3. 8 check-out の際 check-out 先 を指定したい。

co コマンドで明示的にワークファイル名(check-out して生成したいファイル名)を指定する。

例えば

/tmp/my-project/RCS/test.c,v

がある状態(/tmp/my-project ディレクトリで test.c をRCSで管理している状態)で、カレントディレクトリ /tmp/my-work に test.c をチェックアウトするには

co ../my-project/RCS/test.c,v ./test.c

で行える。 ci する時も同様に RCS ファイルとワークファイルの両方を指定する(しない場合、通常の使用と同じようにカレントディレクトリやカレントディレクトリの RCS サブディレクトリに check-in してしまう)。

詳しくは ci のオンラインマニュアルの FILE NAMING(ファイル名規則)セクションを参照。

コマンドの引数が繁雑になり(明示的に2つのファイルを指定する必要あり)作 業ミスもしやすくなるので、このような作業を頻繁に行う場合には cvs の利用を検討するとよいであろう。


4 Lock


4. 1 一人で作業するのでロック機構を無効にしたい。

$rcs -U ファイル名

でロック機構を無効にすることができる。


4. 2 無効になっているロック機構を有効にしたい。

$rcs -L ファイル名

でロック機構を有効にすることができる。


5 ブランチ


5. 1 ブランチを作成したい。

check-in するときに新しく作成するブランチの番号を指定する。

$co -r1.3 test.txt
test.txt を編集
$ci -r1.3.1 test.txt

上記の例では test.txt のリビジョン 1.3 を check-out し編集の後にブランチ 1.3.1 へ check-in している。 このブランチをはじめてつくった場合 check-in したリビジョンは 1.3.1.1 になる。


5. 2 1.3 のブランチを 1.3.1 にしたらリビジョンが 1.3.1.1 になってしまった。

1.3.1 はブランチの番号であり、そのブランチ上のリビジョンには 1.3.1.1, 1.3.1.2, ... が与えられる。 もしリビジョンに 1.3.1, 1.3.2, ...としてしまうと、 1.3 にさらに別のブランチを作成する時に困ってしまうであろう。


6 キーワード


6. 1 どんなキーワードがあるのか知りたい。

以下のようなキーワードがある。

$Author$
リビジョンをチェックインしたユーザーのログイン名
$Date$
リビジョンをチェックインした日付と時間
$Header$
RCS ファイルのフルパス、リビジョン番号、日付、時間、Author名、状態、(ロックされていれば)ロック者
$Id$
RCSファイル名にパスをないことを除き $Header$ と同じ。
$Locker$
リビジョンをロックしたユーザーのログイン名(ロックされていない場合は空)。
$Log$
チェックインした時のログメッセージ。
$Name$
リビジョンをチェックアウトした時に使われたシンボリック名(-r オプション)。 シンボリック名が指定されなかった時は空。
$RCSfile$
パス名のつかない RCS ファイル名。
$Revision$
リビジョンに与えられたリビジョン番号
$Source$
フルパスのつく RCS ファイル名。
$State$
rcs や ci の -s でリビジョンに与えられた状態。

6. 2 ファイル中の identification marker ($Id$) を取出したい。

$ident ファイル名

でファイル中に含まれている identification marker を取出すことができる。 c言語などのプログラム中でコンパイル後のファイルに identification marker が文字列として残るようにしておけば、あとでどのリビジョンから構成されているか確認することができる。


6. 3 Prologプログラム に $Id$ を組み込みたい。

rcsid('$Id$').

という fact をファイルごとに定義することによって、実行時に rcsid(X) で取り出すことができる。 またコンパイルした場合は identによって取り出すこともできる(はず)。


6. 4 TeX(LaTeX)ファイルに $Id$、$Revision$ を組み込みたい。

\def\defrcsid$#1${\def\rcsid{\$#1\$}}
\def\defrcsrevision$#1: #2 ${\def\rcsrevision{#2}}
\defrcsid$Id$
\defrcsrevision$Revision$

という行をプリアンブルに記述すれば \rcsid で $Id$ が($マーク付きで)で展開される。 また \rcsrevision でリビジョン番号(番号部分のみ)が展開される。

ただし、一回チェックアウトしてキーワードが展開されていないと、コンパイルに失敗する(\defrcsrevision の引数エラー)。

また CTAN には RCS のために rcs パッケージや rcsinfo パッケージがあるのでそれを利用してもよい。 ログなどもきれいに出力することができる。

rcs パッケージに関しては拙作のページにて使い方を紹介している。


7 ログ


7. 1 いままでのログメッセージをみたい。

rlogコマンドを用いてログを出力させることができる。

$rlog ファイル名

で指定したファイルのログを見ることができる。


8 Emacs と RCS


8. 1 いま開いているバッファをRCSで管理しはじめたい。

c-x v i とタイプする バッファが変更されていれば

Buffer filename modified: save it? (y or n)

と聞いてくるので y とすると check-in される(そして再びロックしないで check-out されバッファで read-only として参照できるようになる)。 n と答えた場合は中断される。

またはC-x v vとタイプする。 バッファが変更されていれば

Buffer filename modified: save it? (y or n)

と聞いてくるので y とすると check-in される(そして再びロックして check-out され、バッファで編集できるようになる)。 n と答えた場合は中断される。

C-x C-qも check-in に用いられるが、まだ RCS で管理していないバッファに対してタイプするとバッファが read-only になるだけである。


8. 2 Emacs でバージョン管理している時もファイルのバックアップを作成したい。

変数 vc-make-backup-files に nil 以外の値を設定しておくと、バックアップファイルを作成するようになる(vc package)。 例えば .emacs に

(setq vc-make-backup-files t)

という設定を追加しておけばよい。


8. 3 Emacs で実際に実行されているコマンドを知りたい。

変数 vc-command-messages に nil 以外の値を設定しておくと、実行しているコマンドがミニバッファに順次表示される。 これらは *Messages* バッファに残る(vc.el 内で message 関数により出力)。 例えば .emacs に

(setq vc-command-messages t)

という設定を追加しておけばよい。

XEmacs では *Message* バッファのかわりに *Message-Log* バッファで確認できる。 *Message-Log* バッファは M-x show-message-log か Menu から[編集] -> [メッセージログ表示] ([Edit] -> [Show Message log])で見られるようになる(XEmacs 21.1 (patch 12) で確認)。

XEmacs では *Messages* バッファがない?のでミニバッファに順次表示されるだけである(XEmacs 21.1)。

Thanks 武井伸光氏、栗山氏。


8. 4 ログメッセージのコーディングシステムを指定したい。

ログメッセージに日本語を使いたい時などは、きちんとコーディングシステムを統一しておく必要がある。 異なるコーディングシステム混在していると、ログをとりだす時に不便である。

Emacs 20.5 の場合は、default-process-coding-system に使用したいコーディングシステムを指定しておく。 ただし、この場合は他のプロセスにも影響してしまう。 もし、rcs に関して設定したい場合は process-coding-system-alist に設定する。 例えば、.emacs に

(setq process-coding-system-alist
 (append
 '(("rcs"      . utf-8)
 ("ci"       . utf-8)
 ("co"       . utf-8)
 ("rlog"     . utf-8)
 ("rcsdiff"  . utf-8)
 ("rcsmerge" . utf-8)
 ("ident"    . utf-8)
 ("rcsclean" . utf-8))
 process-coding-system-alist))

としておけば rcs 関連のコマンドは UTF-8 で処理される。


8. 5 ChangeLog 作成時の名前、メールアドレスを変更したい。

C-x v a (vc-update-change-log) で ChangeLog のエントリを自動的に生成する事ができる。

ここで使用されるフルネームとメールアドレスはそれぞれ、add-log-full-name, add-log-mailing-address を設定することで変更できる。 emacs の初期化ファイル等で、

(setq add-log-full-name "My Full Name")
(setq add-log-mailing-address "myname@mydomain")

等と設定しておけば良い。


9 その他


9. 1 編集していない作業ファイルはとりあえず削除したい。

$rcsclean

で現在のディレクトリにある、ロックしないで check-out し、更新していないファイルが削除される。 必要になったらあらためて check-out すればよい。

(注:rcsclean はインストールされていない可能性もある。)


9. 2 今編集中のファイルで check-out してからどこを変更したか忘れてしまった。またはどこを変更したか確認したい。

$rcsdiff ファイル名

で RCSファイル中の最新のリビジョンと比較することができる。

$rcsdiff -rリビジョン番号 ファイル名

とすれば指定したリビジョンと比較することができる。


9. 3 ファイル名を変更したい。

check-out しているファイルがなければ RCSファイルの名前を変えればよい。 check-out しているファイルがある場合はそれぞれ変更する必要がある。