Subversionを愛でながら、CVSと比較してみる

どうも、最近無駄にSVNの導入を一人推し進めているhayaです。

Subversionの本を読んで、大体Subversionの概要がわかったのはいいけど、CVSと何が違うのか、CVSにはないメリットはなんなのか、という点がわからなかったので、ちょっと調べてみた。間違いを含んでいる可能性があるので、気がついたらつっこんでください。

Subversion CVS
CVSのバージョン管理モデルはすばらしいが、実装がクソ*1という思想 -
セットアップが大変(らしい)
追記:大変なのはApacheと組み合わせたりするとき。ローカルで遊ぶのは割と簡単*2
セットアップが割と楽(らしい)
レポジトリ全体にリビジョン番号がつく ファイルごとにリビジョン番号がつく
コミットがアトミック コミットはファイル毎
ファイルの移動、コピーをしても変更履歴が保持される ファイルの移動をすると、変更履歴が消える。変更履歴を保つには、レポジトリを管理するファイルを直接編集する必要がある
ファイルを削除しても、変更履歴は残っている→簡単にサルベージ可能? ファイルを削除すると、変更履歴まで逝く
データは全て、BDBかFSFSで管理されるため、レポジトリの内容を直接ハックできない テキストファイルベースのため、レポジトリの内容を直接ハックできる
  • アトミックなコミット
  • ファイルの移動、削除

あたりは、SubversionCVSより優れいている点。まあ、優れているというより、CVSのこういう点に不満を持った人たちがSubversionを作ったわけだけど。
CVSのブランチとかタグの方法がちょっと調べても、具体的にどうなってるのかいまいちピンとこなかったんだけど、Subversionでブランチとかタグをやる場合は、Subversion開発チームの推奨する方法に基づいてやらないと地獄を見そう。Subversionでのブランチ、タグは、単なるディレクトリのコピーなので、やろうと思えばめちゃくちゃな管理方法だってできる。つまり、ブランチ、タグの管理をするときは、使う側がある程度しっかりした意識を持っていないと、たちまちカオスに陥る可能性を秘めている。

あと、「CVSはレポジトリの内容を、必要に応じて直接ハックできるけど、SVNはデータベースを使ってるからハックできない!だからCVSのほうがいい」っていうことを言う人がいるらしいんだけど、普通に考えてハックすることなく柔軟に操作できるSubversionのほうがいくね?