/etc以下にあるような設定ファイルをRCSで管理すると以外と便利です。
バージョン管理というとCVSやSubversionを思い浮かべるでしょう。間違ってもSCCSやRCSが出てくることはありません。
SCCSやRCSは、CVSが登場するまえからあったバージョン管理の仕組みです。
さすがにSCCSを使おうとは思いませんが、RCSは、用途によっては使えます。
例えば、SOHO環境では、/etc/hostsや/etc/aliasesで名前解決やメールのエイリアスを管理しているケースがあると思います。
こうしたファイルを編集するときに、Subversionを使おうとは思いません。せいぜい、下記のように日付付きのファイルコピーを作成して修正してしまいます。
$ cd /etc $ sudo cp hosts hosts.'date -I' $ vi hosts ... 編集&確認 $
これも、悪くはないのですが、気がつくと日付つきのファイルが山ほどできてしまいます。
RCSで管理するには、次のようにします。
$ cd /etc $ sudo mkdir RCS ... (1) $ ci -l hosts ... (2) $ vi hosts ... 編集&確認 $ ci -l hosts # cd /etc # mkdir RCS ... (1) # ci -l hosts ... (2) RCS/hosts,v <-- hosts enter description, terminated with single '.' or end of file: NOTE: This is NOT the log message! >> added hosts. >> . initial revision: 1.1 done # vi hosts ... (3) ... 編集&確認 # ci -l hosts ... (4) RCS/hosts,v <-- hosts new revision: 1.2; previous revision: 1.1 enter log message, terminated with single '.' or end of file: >> added linx10. >> . done #
(1)と(2)は、初回のみ実行する処理でCVSやSubversionのimportにあたります。
普段は、(3)と(4)をやります。
RCSの管理は、日付コピー方式とほぼ同じ手間で、日付付きファイルが増殖せずコメントが残せます。
必要になるコマンドをいくつか紹介します。
履歴を表示する
rlogコマンドでチェックインされているリビジョンとコメントを見ることができます。
# rlog hosts RCS file: RCS/hosts,v Working file: hosts head: 1.2 branch: locks: strict root: 1.2 access list: symbolic names: keyword substitution: kv total revisions: 2; selected revisions: 2 description: added hosts. ---------------------------- revision 1.2 locked by: root; date: 2007/12/08 16:44:20; author: root; state: Exp; lines: +1 -0 test ---------------------------- revision 1.1 date: 2007/12/08 16:39:31; author: root; state: Exp; Initial revision ============================================================================= #
何を編集しているか確認する
自分が何を編集しているのかを確認する方法です。健忘症というわけではないのですが…
ちょっとした手違いで、なにか必要なものを消してしまうミスはあるものです。
# rcsdiff -u hosts =================================================================== RCS file: RCS/hosts,v retrieving revision 1.2 diff -u -r1.2 hosts --- hosts 2007/12/08 16:44:20 1.2 +++ hosts 2007/12/08 16:53:28 @@ -1,4 +1,3 @@ -127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts #
編集を破棄する
やっぱりやめたにしたいことは良くあります。
# co -l hosts RCS/hosts,v --> hosts revision 1.2 (locked) writable hosts exists; remove it? [ny](n): y done # rcsdiff -u hosts =================================================================== RCS file: RCS/hosts,v retrieving revision 1.2 diff -u -r1.2 hosts # grep localhost hosts 127.0.0.1 localhost ::1 ip6-localhost ip6-loopback #
changelogファイルを作る
rcs2logコマンドを使ってchangelogファイルを作ることができます。
# rcs2log hosts 2007-12-09 root <root@debian> * hosts: test * hosts: New file. #
他には
RCSは、特定のバージョン間の差分を確認したり以前のバージョンを戻すといった基本的なこともできます。でも、今回より込み入った使い方が必要になるケースはないでしょう。
また、RCSは、ブランチのような高度で複雑な機能を持っています。CVSのブランチより複雑なので、使いこなすことができません。
バックアップに関しては、CVSやSubversionのようにサーバ間でリポジトリを複製するような便利な方法がありません。通常のファイルシステムのバックアップを計画する必要があります。