Mercurialでハイブリッド管理

前回に続き、Mercurialの話。リポジトリを分散管理できるというけれど、試してみないことにはよく分からないので、複数のPCを用意していろいろ実験してみた。その結果、分かったのは下記の通り。

  • 既存の構成管理を置き換えるものではない
    Subversionの場合、昔のCVSの問題を解決するという明確な目標が有ったように記憶しているけれど、Mercurialは既存の集中管理型の構成管理を置き換えるものではないようだ。オフィスのサーバで集中管理して事足りるのなら、それで充分だと思う。複数の拠点間のリポジトリを共有したい等、分散管理が求められる状況で使うツールだろう。
  • 最新のデータが何処にあるのか分からない
    Subversionのような集中管理型の構成管理では最新データは常にサーバに有るけれど、今回のMercurialでは最新データが一体何処に有るのか不明となる。手持ちのPCを使って、あちこちにリポジトリを作りそれらの変更を互いにやり取りしてみたけれど、あっという間にどれが最新のデータなのか分からなくなってしまった。この場合、当然のことながらどこかの1箇所のリポジトリに全ての変更を集約させる作業が必要になってしまう。

なんだかネガティブな感想ばかり書いてしまったが、個人的には既存の集中管理型の構成管理を補うツールとして面白い存在だと感じている。気に入っている使い方は下記の通り。

  • 他で集中管理されているデータを、Mercurialでローカル管理する
    オープンソースプロジェクトなどで管理されているソースをチェックアウトして取り込んだ場合、勉強や調査のために勝手に変更を加えてもその履歴を管理できなかった。もちろん、エクスポートしたソースをローカル側のリポジトリに入れて管理することも可能なのだが、この方法ではオリジナル側が更新された時に変更が面倒。そんなわけで対外的な管理としては従来通りSubversionを使用し、ローカル側では独自にMercurialを使って変更管理を行う「ハイブリッド型」の管理を行えば良い。同様に、(セキュリティの問題は別として)会社のサーバで管理されているソースを持ち出して社外に持ち出して変更を加え、会社に戻った後でサーバへ変更を反映させるという使い方でも有効だろう。

以前にCVSからSubversionへ移行した時には、使い勝手の向上が大きな売りだったので楽に使い始めることが出来たけれど、Mercurialの場合はリポジトリに関する根本的な思想が異なるため少々慣れが必要かも知れない。でも、使用方法によってはなかなか便利なツールだと思う。