蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

バージョン管理システム

プログラムやウェブページを書いていると、バージョンの管理をしたくなる場合がある。バージョン管理を行うソフトにはRCSCVSsubversionなどがあるが、とりあえず一番とっつきやすそうなRCSを試してみた。なお、Mac OS Xにはすでに入っており特にインストールする必要はなかった。
今回はすでに存在するファイルのバージョン管理を行う。まず、RCSディレクトリを作成する。

mkdir RCS

次に、編集前の状態をチェックインする(RCSに登録する)。

ci -l test.html

単にチェックインするとファイルが消去されるが、-l をつけると(co -lでロックしてチェックアウトしたのと同様で)そのまま参照したり編集したりすることができる。
編集が終わったらそれをファイルを残してチェックインする。編集が終わったのでunlockしておく。

ci -u test.html

以降に編集するときは、編集前にlockしてチェックアウトする(RCSから取り出す)。

co -l test.html

RCSを使わずに(co、ciせずに)編集しちゃったあとチェックアウトしようとすると

writable test.html exists; remove it? [ny](n):

と言われてしまう。この場合は今あるファイルが新しいので消すわけにいかない。かと言ってチェックインしようにも"no lock set by username"と言われる。まずはlockするために

rcs -l test.html

を実行し、その後おもむろにチェックインすればよいだろう。

某バイト先でやってたので真似したのだが、もし「使い方間違ってんで」という場合はコメントいただきたく。
あと問題点としてcgiなどのスクリプトは、RCS/hoge.cgi,vでソースが見えてしまう*1.htaccessなどで回避できるはずだが、ちょっとイヤな感じ。

どこが便利か

簡単バックアップ
mkdir BACKUP
cp test.html BACKUP/test.html.20051023

みたいなことを簡単に行える。これを毎回行うのは面倒だが、RCSならco -lしてci -uするだけなので簡単。

特定のリビジョンを表示する
co -p1.1 test.html
ある日付以前の最新のリビジョンを表示する
co -p -d2005/10/23 test.html
diffを表示する

チェックアウト後にどこを編集したか

rcsdiff test.html

あるリビジョンと最新のリビジョンとのdiff

rcsdiff -r1.1 test.html
変更履歴を見る
rlog test.html

どこが不便か

  • 覚えることが多い
  • 複数人で管理するには向いてない?RCSを使うよう周知徹底が必要。しかし往々にして忘れ去られる(某バイト先)w

*1:cp hoge.cgi hoge.cgi.20051023でも同様の問題があるわけだが