rcsを使う(その1)


アニメ『SERVAMP-サーヴァンプ-』(2016)

最近は、吸血鬼アニメに夢中です。吸血鬼って首元にかぷってして血を得るのでしょうけど、どうやって吸ってるのでしょう。キバがストローみたいになってるのでしょうか。キバ刺してたら、逆に吸いにくいんじゃないかと思います。吸血鬼というと身分が高いイメージがあるのですが、このアニメに出てくる吸血鬼たちは、タイトルから分かるとおり、サーバント(召使い)のヴァンパイアです。主人が血を与えることで契約します。サーバントなので主人の言うことを聞くしかないようで、面倒くさい、面倒くさい、と言いながら、むしろ面倒くさいことを率先してやってます。

今回もrcsコマンドを使っていきます。

前回少し使ったので、カレントディレクトリはこのような状態になっています。

takk@deb9:~/tmp$ ls
test.c  test.c,v
takk@deb9:~/tmp$ 

改めて管理ファイルを作るので、今ある,vファイルは削除します。

takk@deb9:~/tmp$ rm *v
rm: 書き込み保護されたファイル 通常ファイル 'test.c,v' を削除しますか?y
takk@deb9:~/tmp$ ls
test.c
takk@deb9:~/tmp$ 

本来はRCSディレクトリを作って、その中で,vファイルを管理していくようですので、RCSディレクトリを準備した後に、再度,vファイルを作ります。

takk@deb9:~/tmp$ mkdir RCS
takk@deb9:~/tmp$ rcs -i test.c
RCS file: RCS/test.c,v
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> TEST
>> .
done
takk@deb9:~/tmp$ 

RCSディレクトリ配下に管理ファイルができたか確認します。

takk@deb9:~/tmp$ find
.
./test.c
./RCS
./RCS/test.c,v
takk@deb9:~/tmp$ 

では、初回チェックインしましょう。コマンドを忘れてしまったので、ヘルプ。

takk@deb9:~/tmp$ rcs --command
(command)   (description)
 ci          Check in revisions of RCS files from working files.
 co          Check out working files from revisions of RCS files.
 frob        Change RCS file attributes.
 clean       Clean up working files.
 diff        Compare RCS revisions.
 merge       Merge RCS revisions.
 log         Print log messages and other information about RCS files.
takk@deb9:~/tmp$ 

ciですね。

現状のtest.cはこのような内容になっています。

takk@deb9:~/tmp$ cat test.c
int main()
{
	return 0;
}
takk@deb9:~/tmp$ 

では、チェックイン。

takk@deb9:~/tmp$ rcs ci test.c
RCS/test.c,v  <--  test.c
initial revision: 1.1
done
takk@deb9:~/tmp$ 

特にログを入力しませんでしたので、自動でinitial revisionと登録されたようです。
ファイルの内容はどうなったでしょうか。

takk@deb9:~/tmp$ cat test.c
cat: test.c: そのようなファイルやディレクトリはありません
takk@deb9:~/tmp$

あれ、ない?

takk@deb9:~/tmp$ ls
RCS
takk@deb9:~/tmp$

チェックインすると、ファイルが消えるってことでしょうか。
チェックアウトしてみます。

takk@deb9:~/tmp$ rcs co test.c
RCS/test.c,v  -->  test.c
revision 1.1
done
takk@deb9:~/tmp$ cat test.c
int main()
{
	return 0;
}
takk@deb9:~/tmp$ 

ファイルが復活しました。
内容も変わらずですね。ですが、

takk@deb9:~/tmp$ ls -l test.c
-r--r--r-- 1 takk takk 26  9月 12 20:52 test.c
takk@deb9:~/tmp$

なぜかリードオンリーになってます。

書き込み許可した後に、ファイル修正して、再びチェックインしてみましょう。

takk@deb9:~/tmp$ chmod 644 test.c
takk@deb9:~/tmp$ vi test.c
takk@deb9:~/tmp$ cat test.c
#include <stdio.h>
int main()
{
	printf("HELLO\n");

	return 0;
}
takk@deb9:~/tmp$ 

ではチェックイン。

takk@deb9:~/tmp$ rcs ci test.c
RCS/test.c,v  <--  test.c
ci: RCS/test.c,v: no lock set by takk
takk@deb9:~/tmp$ 

なんと、ロックを取得する必要があるようです。

-lオプションで、ロックを取得するレビュジョンを指定します。

takk@deb9:~/tmp$ rcs -l1.1 test.c
RCS file: RCS/test.c,v
1.1 locked
done
takk@deb9:~/tmp$

これで、チェックインできるはず。

takk@deb9:~/tmp$ rcs ci test.c
RCS/test.c,v  <--  test.c
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> 2nd Check in
>> .
done
takk@deb9:~/tmp$ 

おそらく、ファイルは、消えてるんでしょうね。

takk@deb9:~/tmp$ ls
RCS
takk@deb9:~/tmp$ 

やはり。なんとなく分かってきました。

チェックアウトしてみます。

takk@deb9:~/tmp$ rcs co test.c
RCS/test.c,v  -->  test.c
revision 1.2
done
takk@deb9:~/tmp$ cat test.c
#include <stdio.h>
int main()
{
        printf("HELLO\n");
        return 0;
}
takk@deb9:~/tmp$

最後にログを確認します。

takk@deb9:~/tmp$ rcs log test.c

RCS file: RCS/test.c,v
Working file: test.c
head: 1.2
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2;     selected revisions: 2
description:
TEST
----------------------------
revision 1.2
date: 2018/09/12 11:58:02;  author: takk;  state: Exp;  lines: +2 -0
2nd Check in
----------------------------
revision 1.1
date: 2018/09/12 11:49:34;  author: takk;  state: Exp;
Initial revision
=============================================================================
takk@deb9:~/tmp$

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA