■debian WheezyにRCSを導入する。
$ sudo apt-get install -y rcs
$ dpkg -L rcs | grep bin/
/usr/bin/merge
/usr/bin/rcs
/usr/bin/co
/usr/bin/ident
/usr/bin/rcsmerge
/usr/bin/ci
/usr/bin/rcsdiff
/usr/bin/rlog
/usr/bin/rcsclean
■hostsを「~/dummy/etc」にコピーしてそこで作業する。
$ sudo mkdir -p ~/dummy/etc
$ sudo cp -pi /etc/hosts ~/dummy/etc
$ test -d ~/dummy/etc && cd ~/dummy/etc
$ pwd
/home/labunix/dummy/etc
$ ls -l hosts
-rw-r--r-- 1 root root 206 5月 9 22:32 hosts
$ sudo sed -i s/"`hostname -s`\$"/"dummy"/g hosts
$ sudo sed -i s/"`hostname -f`"/"dummy.example.jp"/g hosts
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
■RCSの初期化
$ test -d RCS || mkdir RCS
$ rcs -i hosts
rcs: hosts,v: Permission denied
$ sudo rcs -i hosts
RCS file: hosts,v
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> Hello RCS
>>
>> .
done
■ロックとアンロック
「strict」は厳格モード。
厳格モードとは、RCS ファイルの所有者であっても、
ロックしているファイルをチェックインすることができなるモードのこと。
$ sudo rcs -L hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks: strict
$ sudo rcs -U hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks:
■チェックインとチェックアウト
※チェックインはロックされている状態で行う。
$ sudo ci hosts;ls -l hosts
hosts,v <-- hosts
initial revision: 1.1
done
ls: hosts にアクセスできません: そのようなファイルやディレクトリはありません
$ sudo co hosts;ls -l hosts
hosts,v --> hosts
revision 1.1
done
-r--r--r-- 1 root root 202 6月 4 21:15 hosts
■ログの確認
$ sudo rlog ./hosts
RCS file: ./hosts,v
Working file: ./hosts
head: 1.1
branch:
locks:
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
Hello RCS
----------------------------
revision 1.1
date: 2013/06/04 13:02:54; author: root; state: Exp;
Initial revision
=============================================================================
■使用可能な「ident」の確認
$ man ident 2>/dev/null | grep "^ \$[A-Z][a-z].*\$"
$Author$
$Date$ そのリビジョンをチェックインした日付と時刻です。
$Header$
$Id$ RCS ファイルの名前がフルパスでないことを除いて、 $Header$, と同
$Locker$
$Log$ チェックインのときに書かれたログメッセージです。 ident の目的と
$Name$ リビジョンをチェックアウトするときに使うシンボル名です(ないかも
$Revision$
$Source$
$State$
■編集時にはアンロックされていること。
$ sudo rcs -U hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks:
$ sudo sed -i s/"^127.0.0.1"/'# $Id$'"\n"'# $Author$'"\n"'# $Log$'"\
"'# $Date$ '"\n"'# $Header$'"\n"'# $Locker$'"\n"'# $RCSfile$'"\n"'# $Revision$'"\n"'# $Source$'"\n"'# $State$'"\n&"/ hosts
$ cat hosts
# $Id$
# $Author$
# $Log$
# $Date$
# $Header$
# $Locker$
# $RCSfile$
# $Revision$
# $Source$
# $State$
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
■チェックインして更新、チェックアウトしてファイルに書き出す必要がある。
書き出した後は保護する為、ロックする。
$ rlog hosts | grep lock
locks:
$ sudo ci hosts
hosts,v <-- hosts
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> Add ident options.
>>
>> .
done
$ sudo co hosts
hosts,v --> hosts
revision 1.2
done
$ sudo rcs -L hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks: strict
■以下のように書き変わる。
下に見るとおり、「$Id$」か「$Log$」があれば充分。
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
■差分を確認。
$ sudo rcsdiff -r1.1 -r1.2 hosts
===================================================================
RCS file: hosts,v
retrieving revision 1.1
retrieving revision 1.2
diff -r1.1 -r1.2
0a1,12
>
>
>
>
>
>
>
>
>
>
>
>
■diffらしく表示するならば。。。
「-u」はアンロックではなく、diffのオプション。
$ sudo rcsdiff -r1.1 -r1.2 -u hosts
===================================================================
RCS file: hosts,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- hosts 2013/06/04 13:02:54 1.1
+++ hosts 2013/06/04 13:04:48 1.2
@@ -1,3 +1,15 @@
+# $Id: hosts,v 1.2 2013/06/04 13:04:48 root Exp $
+# $Author: root $
+# $Log: hosts,v $
+# Revision 1.2 2013/06/04 13:04:48 root
+# Add ident options.
+## $Date: 2013/06/04 13:04:48 $
+# $Header: /home/labunix/dummy/etc/hosts,v 1.2 2013/06/04 13:04:48 root Exp $
+# $Locker: $
+# $RCSfile: hosts,v $
+# $Revision: 1.2 $
+# $Source: /home/labunix/dummy/etc/hosts,v $
+# $State: Exp $
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
■ということでここでは「$Log$」を採用する。
$ sudo rcs -U hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks:
$ sudo vim hosts
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo ci hosts
hosts,v <-- hosts
new revision: 1.3; previous revision: 1.2
enter log message, terminated with single '.' or end of file:
>> Change Ident Log Only.
>>
>> .
done
$ ls
hosts,v
$ sudo co hosts
hosts,v --> hosts
revision 1.3
writable hosts exists; remove it? [ny](n): y
done
$ ls
hosts hosts,v
$ sudo rcs -L hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks: strict
■1.1と1.3の差分を表示
$ sudo rcsdiff -r1.1 -r1.3 hosts
===================================================================
RCS file: hosts,v
retrieving revision 1.1
retrieving revision 1.3
diff -r1.1 -r1.3
0a1,4
>
>
>
>
■1.2は不要になった。
$ sudo rcs -U hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks:
$ sudo rcs -o1.2 hosts
RCS file: hosts,v
deleting revision 1.2
done
$ sudo rcs -L hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks: strict
■1.2の変更情報が消えた。
$ sudo rlog hosts
RCS file: hosts,v
Working file: hosts
head: 1.3
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
Hello RCS
----------------------------
revision 1.3
date: 2013/06/04 13:08:03; author: root; state: Exp; lines: +1 -0
Change Ident Log Only.
----------------------------
revision 1.1
date: 2013/06/04 13:02:54; author: root; state: Exp;
Initial revision
=============================================================================
■誰がロックしているか見るには「grep lock」で良い。
また、ロック中は所有者も変更不可なので、変更は失敗する。
$ sudo rlog hosts | grep lock
locks: strict
$ sudo rcs -o1.3 hosts
RCS file: hosts,v
rcs: hosts,v: can’t remove locked revision 1.3
■やっぱり、一行で済む「$Id$」にしよう。
$ sudo rcs -U hosts;sudo rlog hosts | grep locks
RCS file: hosts,v
done
locks:
$ sudo vim hosts
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo ci hosts
hosts,v <-- hosts
new revision: 1.4; previous revision: 1.3
enter log message, terminated with single '.' or end of file:
>> Change indent Log to Id.
>> .
done
$ sudo co hosts
hosts,v --> hosts
revision 1.4
done
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
■マージする。
$ sudo rcsmerge -r1.1 -r1.4 hosts
RCS file: hosts,v
retrieving revision 1.1
retrieving revision 1.4
Merging differences between 1.1 and 1.4 into hosts
$ rlog hosts
RCS file: hosts,v
Working file: hosts
head: 1.4
branch:
locks:
access list:
symbolic names:
keyword substitution: kv
total revisions: 3; selected revisions: 3
description:
Hello RCS
----------------------------
revision 1.4
date: 2013/06/04 13:12:05; author: root; state: Exp; lines: +1 -1
Change indent Log to Id.
----------------------------
revision 1.3
date: 2013/06/04 13:08:03; author: root; state: Exp; lines: +1 -0
Change Ident Log Only.
----------------------------
revision 1.1
date: 2013/06/04 13:02:54; author: root; state: Exp;
Initial revision
=============================================================================
$ sudo rcs -o1.1 hosts
RCS file: hosts,v
deleting revision 1.1
done
$ sudo rcs -o1.3 hosts
RCS file: hosts,v
deleting revision 1.3
done
■間違えた。
$ sudo ci -s1.0 hosts
hosts,v <-- hosts
new revision: 1.5; previous revision: 1.4
enter log message, terminated with single '.' or end of file:
>> 1.0 release.
>>
>> .
done
$ sudo co hosts
hosts,v --> hosts
revision 1.5
done
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo co -r1.4 hosts
hosts,v --> hosts
revision 1.4
writable hosts exists; remove it? [ny](n): y
done
$ cat hosts
127.0.0.1 localhost
127.0.1.1 dummy.example.jp dummy
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo rcs -o1.5 hosts
RCS file: hosts,v
deleting revision 1.5
done
■強制的に「1.0」にして、「Rel」する。
※複数人でやると大変なことになるのでローカルのみ。
$ sudo sed -i s/"1.4"/"0.0"/g hosts,v
$ rlog hosts
RCS file: hosts,v
Working file: hosts
head: 0.0
branch:
locks:
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
Hello RCS
----------------------------
revision 0.0
date: 2013/06/04 13:12:05; author: root; state: Exp;
Change indent Log to Id.
=============================================================================
$ sudo ci -srel -r1.0 hosts
hosts,v <-- hosts
new revision: 1.0; previous revision: 0.0
enter log message, terminated with single '.' or end of file:
>> 1st release.
>> .
done
$ sudo co hosts
hosts,v --> hosts
revision 1.0
done
$ sudo rcs -o0.0 hosts
RCS file: hosts,v
deleting revision 0.0
done
$ cat hosts
127.0.0.1 localhost
127.0.1.1 lpic303.test.local lpic303
:1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$ sudo rlog hosts
RCS file: hosts,v
Working file: hosts
head: 1.0
branch:
locks:
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
Hello RCS
----------------------------
revision 1.0
date: 2013/06/04 13:32:29; author: root; state: rel;
1st release.
=============================================================================
$ sudo rcs -L ./hosts
RCS file: ./hosts,v
done
$ sudo rlog ./hosts
RCS file: ./hosts,v
Working file: ./hosts
head: 1.0
branch:
locks: strict
access list:
symbolic names:
keyword substitution: kv
total revisions: 1; selected revisions: 1
description:
Hello RCS
----------------------------
revision 1.0
date: 2013/06/04 13:32:29; author: root; state: rel;
1st release.
============================================================================