Mercurialとは,Pythonで実装された,分散リポジトリ形式の構成管理ツールです(「バージョン管理ツール」「リビジョン管理ツール」とも呼ばれています)。OpenJDKやMozilla,OpenSolaris等を始めとする多くのプロジェクトで採用されています。
単に「分散構成管理ツール」と言った場合,ネットワーク経由で連携する,いわゆる「クライアント・サーバ」形式で動作可能なCVSやSubversionも含まれますが,履歴情報の記録・管理が中央のサーバに集約されていることから,これらのツールは「中央集約リポジトリ(centralized repository)」形式と言えます。
一方Mercurialは,リポジトリを複数の場所に分散させることができるため,「分散リポジトリ(distributed repository)」形式と言えます。
「分散リポジトリ」などという仰々しい謳い文句に対して「理解するのが難しいのでは?」と気後れしたり,試しに使ってはみたものの今ひとつ便利さがわからない(あるいは「面倒なのでもう使いたくない!」)と思わた方もおられるかもしれません。
しかし,ちょっとしたコツを飲み込みさえすれば,「分散リポジトリ」によって非常に高い自由度を獲得することができるのです。
この連載では,読者がイメージし易いように具体的な利用シチュエーションを設定しながら,Mercurialによる 「分散リポジトリ」での構成管理について解説しようと思います。本連載がMercurial,ひいては「分散リポジトリ」での構成管理に対する理解の一助になれば幸いです。
Mercurialのインストール
本原稿執筆時点では,OS環境ごとに以下のインストール方法を選択可能です。
表1 インストール方法一覧
| OS | 形式 | 方法 |
|---|---|---|
| Linux/Unix | Pythonスクリプト | パッケージ管理経由 |
| ソースからビルド | ||
| Windows | バイナリ(*.exe) | インストーラ経由 |
| ソースからビルド | ||
| Pythonスクリプト | Cygwinのsetup.exe経由 | |
| ソースからビルド |
Linux/Unix環境ならパッケージ管理経由での導入が簡単です。
Windows環境への導入は,Cygwinを常用しているならCygwinのsetup.exe経由でPythonスクリプト形式を,そうでないならインストーラ経由でのバイナリ形式の導入が簡単です。
それぞれのインストール手順に関しては,別途詳細を説明したページを参照してください。
インストールが済んだなら,早速使ってみましょう。
まっさらな状態からリポジトリを作成する手順は次ページ以降で説明しますので,手近な対象としてMercurial自身のリポジトリを複製してみましょう。
コマンド1
% hg clone http://selenic.com/repo/hg mercurial-repo requesting all changes adding changesets adding manifests adding file changes added 6571 changesets with 12628 changes to 910 files 795 files updated, 0 files merged, 0 files removed, 0 files unresolved % ls -F mercurial-repo/ %
これで"mercurial-repo"ディレクトリ配下にMercurial自身のリポジトリが複製されました("mercurial-repo"引数を省略した場合,URL末尾の"hg"が複製先ディレクトリ名として使用されます)。
例えば,以下のように"hg log"コマンドを実行することで,Mercurial開発における履歴を参照することができます。
コマンド2
% cd mercurial-repo
% hg log -l 10
changeset: 6570:626cb86a6523
tag: tip
user: Benoit Allard <benoit@aeteurope.nl>
date: Thu Apr 24 17:16:02 2008 +0200
summary: add compression type type parameter to bundle command
changeset: 6569:c15bfe9cdcd6
user: Benoit Allard <benoit@aeteurope.nl>
date: Thu Apr 24 11:48:07 2008 +0200
summary: add support for HG10GZ bundles to bundlerepo.bundlerevlog()
:
(省略)
:
%
"-l 10"オプションは,表示対象を最新の10件に限定するためのものです。指定しなくても問題ありませんが,大量の履歴が表示されますのでご注意ください。
もしもネットワーク接続を簡単に切断できる状況にあるなら,切断した上で"hg log"を実行してみてください。いわゆる「オフライン」状態でも"hg log"が機能していることがわかるでしょう。
一旦構成管理情報を取り込んでしまえば,オフライン状態でも殆どの機能が利用可能な点は,「中央集約リポジトリ」形式に対する「分散リポジトリ」形式の利点の1つです。

