Category Archives: 9-2.バージョン管理

RCSファイルの変化を見る

そろそろrcsも分かってきましたが、使い道がまだ見出せません。
今回は、ファイルを修正した時の、管理ファイル内部の変化を見ていきます。
まずは、RCSディレクトリを作成して、実験用ファイル準備。

takk@deb9:~/tmp$ ls
takk@deb9:~/tmp$ mkdir RCS
takk@deb9:~/tmp$ echo hello_1>file1.txt
takk@deb9:~/tmp$ rcs -i file1.txt
RCS file: RCS/file1.txt,v
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> init
>> .
done
takk@deb9:~/tmp$ ci file1.txt
RCS/file1.txt,v  <--  file1.txt
initial revision: 1.1
done
takk@deb9:~/tmp$ ls
RCS
takk@deb9:~/tmp$

現状のRCSファイル(,v)を確認してみます。

takk@deb9:~/tmp$ cat RCS/file1.txt,v > 1.1
takk@deb9:~/tmp$ cat 1.1
head    1.1;
access;
symbols;
locks; strict;
comment @# @;


1.1
date    2018.10.12.12.04.46;    author takk;    state Exp;
branches;
next    ;


desc
@init
@


1.1
log
@Initial revision
@
text
@hello
@
takk@deb9:~/tmp$

これは以前見たことありますね。

次は、チェックアウト、ファイル更新後、チェックイン。

takk@deb9:~/tmp$ co -l ./file1.txt
./RCS/file1.txt,v  -->  ./file1.txt
revision 1.1 (locked)
done
takk@deb9:~/tmp$ vi file1.txt
takk@deb9:~/tmp$ echo hello_2>>file1.txt
takk@deb9:~/tmp$ ci ./file1.txt
./RCS/file1.txt,v  <--  ./file1.txt
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$

レビジョンが上がりました。
RCSファイルはどんな変化をしたでしょうか。
差分を左右に並べて確認します。(追加行は>で、変更行が|マークです)

takk@deb9:~/tmp$ diff -y -W50 1.1 1.2 | expand -t8
head    1.1;          | head    1.2;
access;                 access;
symbols;                symbols;
locks; strict;          locks; strict;
comment @# @;           comment @# @;


                      > 1.2
                      > date    2018.10.12.12
                      > branches;
                      > next    1.1;
                      >
1.1                     1.1
date    2018.10.12.12   date    2018.10.12.12
branches;               branches;
next    ;               next    ;


desc                    desc
@init                   @init
@                       @


                      > 1.2
                      > log
                      > @2nd check in
                      > @
                      > text
                      > @hello_1
                      > hello_2
                      > @
                      >
                      >
1.1                     1.1
log                     log
@Initial revision       @Initial revision
@                       @
text                    text
@hello_1              | @d2 1
@                       @
takk@deb9:~/tmp$

では一つずつ見ていきます。

head    1.1;          | head    1.2;

headは当然最新のレビジョンに更新されますね。

                      > 1.2
                      > date    2018.10.12.12
                      > branches;
                      > next    1.1;
                      >
1.1                     1.1
date    2018.10.12.12   date    2018.10.12.12
branches;               branches;
next    ;               next    ;

レビジョンと、日付。diffの左右出力で文字数制限したので、隠れて見えないですがauthor等の情報が追加されています。前のレビジョン(next)の情報も追加されました。

                      > 1.2
                      > log
                      > @2nd check in
                      > @
                      > text
                      > @hello_1
                      > hello_2
                      > @
                      >
                      >

これがログと、変更内容本体(@から@までの内容)ですね。headの内容をチェックアウトするときは、最速で取得できるように、そのままのテキストとなっているようです。

前のレビジョン1.1を取得するときは、d2となっているので、headの内容からhello_2と改行を消した内容でチェックアウトされます。

1.1                     1.1
log                     log
@Initial revision       @Initial revision
@                       @
text                    text
@hello_1              | @d2 1
@                       @

この管理ファイルの仕組みを利用すると何か出来そうに思えますが、今のところ何も思い浮かびません。