Subversionを愛でながら、CVSと比較してみる
どうも、最近無駄にSVNの導入を一人推し進めているhayaです。
Subversionの本を読んで、大体Subversionの概要がわかったのはいいけど、CVSと何が違うのか、CVSにはないメリットはなんなのか、という点がわからなかったので、ちょっと調べてみた。間違いを含んでいる可能性があるので、気がついたらつっこんでください。
Subversion | CVS |
---|---|
CVSのバージョン管理モデルはすばらしいが、実装がクソ*1という思想 | - |
セットアップが大変(らしい) 追記:大変なのはApacheと組み合わせたりするとき。ローカルで遊ぶのは割と簡単*2 |
セットアップが割と楽(らしい) |
レポジトリ全体にリビジョン番号がつく | ファイルごとにリビジョン番号がつく |
コミットがアトミック | コミットはファイル毎 |
ファイルの移動、コピーをしても変更履歴が保持される | ファイルの移動をすると、変更履歴が消える。変更履歴を保つには、レポジトリを管理するファイルを直接編集する必要がある |
ファイルを削除しても、変更履歴は残っている→簡単にサルベージ可能? | ファイルを削除すると、変更履歴まで逝く |
データは全て、BDBかFSFSで管理されるため、レポジトリの内容を直接ハックできない | テキストファイルベースのため、レポジトリの内容を直接ハックできる |
- アトミックなコミット
- ファイルの移動、削除
あたりは、SubversionがCVSより優れいている点。まあ、優れているというより、CVSのこういう点に不満を持った人たちがSubversionを作ったわけだけど。
CVSのブランチとかタグの方法がちょっと調べても、具体的にどうなってるのかいまいちピンとこなかったんだけど、Subversionでブランチとかタグをやる場合は、Subversion開発チームの推奨する方法に基づいてやらないと地獄を見そう。Subversionでのブランチ、タグは、単なるディレクトリのコピーなので、やろうと思えばめちゃくちゃな管理方法だってできる。つまり、ブランチ、タグの管理をするときは、使う側がある程度しっかりした意識を持っていないと、たちまちカオスに陥る可能性を秘めている。
あと、「CVSはレポジトリの内容を、必要に応じて直接ハックできるけど、SVNはデータベースを使ってるからハックできない!だからCVSのほうがいい」っていうことを言う人がいるらしいんだけど、普通に考えてハックすることなく柔軟に操作できるSubversionのほうがいくね?
*1:http://subversion.bluegate.org/svn-anti-fud-ja.html より
*2:Thanks to seih!