個人的にSubversionも随分飽きてきた使えるようになったので、最近違うSCMを触り始めています。
その名も『Mercurial』。Python製の分散型のバージョン管理システムです。
ちなみに、このMercurialですが、XenやMozilla、OpenSolarisのバージョン管理システムとして採用されています。
# 結構、大物たちですよね。
分散型と中央集中型
Mercurialの特徴は何度も単語が出てきていますが、分散型ということです。
一方、CVSやSubversionは中央集中型と呼ばれ、マスタリポジトリ1つと、各人のローカルに作業コピーを持つモデルですが、分散型のモデルでは、ローカルリポジトリとリモートリポジトリという概念が存在します。
とはいっても、別に難しい話ではなくて、作業コピーそのもののバージョン管理ができるローカルリポジトリがあって、リモートにマスタリポジトリが存在する(この概念は中央集中型と一緒ですね)というだけの話です。
Mercurialの特徴とか感想
で、分散型と中央集中型の話は、これくらいにして、このMercurialを使うと何が嬉しいのか。
っつー点なんですが、
- ローカルにリポジトリを持てるため、オフライン(マスタリポジトリにアクセスできなくても)でも開発を進めることが出来る。
- シンプルな構造なので、操作が高速。インストールもちょっぱや。
- 標準でWebインターフェースが付属
- Python製なので、Pythonからがっつりコントロールできる(らしい)
などなど。(もっと、なんかありそうだけど。)
1つ目については、Subversionでもsvkを入れれば、同様のことは実現できますが、やはりインストールまで時間がかかったり(Subversion系はmakeに時間かかりすぎ)とか、処理速度の面では、Mercurialに軍配が上がるように思います。
ローカルリポジトリでバージョン管理しながら、オフラインで開発を進めて、オンラインになったときに、まとめてマスタリポジトリにコミットする、なんてことが可能になります。
Mercurialでは「ローカルリポジトリは、個人用のブランチである」的な考えだそうです。なるほど。
処理も、かなり軽い感じで、コミットも軽快に行えました。(試したときは、管理ファイル数が少なかったり、リビジョンも進んでなかったというのもあると思いますが。)
Subversionとかだと、まずローカルにチェックアウト(リポジトリと同期)するかと思いますが、Mercurialでもそれは変わりません(チェックアウトとは呼びませんが)。
ただ、ローカルに出来るのが作業コピーではなくリポジトリが生成されるといったイメージです。
で、そのリポジトリを直接触るって感じですかね。
もちろん、そのディレクトリ内部でメタデータを保持していて、版管理を命令に応じてしてくれているといった感じです。
あと、インストールがちょっぱやな件ですが、私が試した環境(Linux)にはPythonが既にインストールされていたので、インストールは1分程で終わりました。
$ wget http://www.selenic.com/mercurial/release/mercurial-0.9.5.tar.gz $ tar zxvf mercurial-0.9.5.tar.gz $ cd mercurial-0.9.5 $ sudo python setup.py install --prefix=/usr/local
だけです。
Debianを利用しているなら、aptでもパッケージングされています。(ちょっとバージョン古いけど。)
以下のコマンド一発で終わりそうです。
# apt-get install mercurial
あと、Webインターフェースも便利ですね。RSSも吐いてくれるようだし。
こんな画面で見ることが出来ます。(例えば↓こんなの)
http://www.lalalila.org/repos/
最後に、さすがPython製っつーか、Tracのプラグインもちゃんとあるみたいですよ。ご参考まで。
ということで
がっつり、バージョン管理するなら、Subversionで良いと思います。安定もしていますしね。
でも、これから環境作って、ちょろっと開発したいだけなんだよー、的な方に如何でしょうか。
お手軽に共有リポジトリが作れますよ。すごく便利だと思います。
あと、個人的には、こういう分散型リポジトリの仕組みが、拠点開発とか遠隔地との開発時に、うまく活用できないかしら、なんて考えています。
まだ答えはないですけど。