2011年1月7日金曜日

BazaarはSVNに似た分散バージョン管理システム

このエントリーをはてなブックマークに追加
Pocket

Git、Mercurialに続く人気の分散バージョン管理システムにBazaarがある。前者二つは、Linuxのソースコード管理の問題から産まれたものだが、これらより数ヶ月早くオープンソース・プロジェクト向けに開発開始されたものがBazaarだ。FSFのGNUプロジェクトとなっている。

新規導入であれば、Git、Mercurialと同時に候補にあがってくるはずだが、現状では人気では劣っているように感じ、あまり機能面も知られていないのが現状だ。以前の記事『SVNからMercurialに移行するべき8つの理由』、『操作体系から見る、GitとMercurialの8つの違い』の補足として、Bazaarについて特徴をまとめてみた。

1. Subversionと似たブランチ中心のリポジトリ管理

GitやMercurialは、複数ブランチで構成されるリポジトリが必ず作成されるが、Bazaarの最小構成はブランチのみである。複数ブランチを作成するときは、ブランチごとにディレクトリ名を指定する必要がある。

Bazaarで言う共有リポジトリも作る事ができる。ここでの『共有』は複数ブランチで、チェンジセット等を共有する意味で用いられ、複数ユーザーがリポジトリにアクセスする意味ではない。リポジトリの作成によって、省スペース化とブランチ作成の高速化が行われる。

Bazaarの共有リポジトリを使うには、まず共有リポジトリを作成し、そのディレクトリの中に、オプションを付けてブランチを作成する必要がある。後から既存ブランチを共有リポジトリの下に移動させ、設定を変更することもできるが、手順は煩雑な感じだ。

2. 柔軟な対応ネットワーク・プロトコル

sshのほかに、WebDAVで運用する事できるし、FTPでリポジトリの公開もできる。sshはWindows上では、PATHさえ通っていればOpenSSHでもPuttyでも扱うことができる。

Mercurialはsshに加えて効率の良い専用httpプロトコルが使えるため、Bazaarの対応プロトコルは特に優位ではないが、問題があるわけではない。Gitと同等の運用が可能だ。

3. 柔軟、もしくは一貫性の無い運用方法

GitやMercurialのように手動でpush/pullを行う運用のほかに、自動でリモート・リポジトリにpush/pullを行う"checkout"機能がある。

もちろん自動で同期を取ると、間違ったコミットを行ったときに影響範囲がローカル・リポジトリで収まらないので、分散バージョン管理システムを利用している利点が半減する。

4. 日本語ファイル名

BazaarはUTF-8でファイル名を格納する。バイト列として格納するGitやMercurialよりは処理系に依存しない方法で、LinuxとWindowsで容易に日本語名のファイルをやり取りする事が可能になる。

ただし、正規化(「が」と「か゛」のように意味的には同じだが異なる表記の統一)の手法によっては互換性が無くなる。例えば、WindowsやLinuxではNFCが用いられるのに対し、Macintosh OS XではNFDが用いられるため、これらでBazaarのリポジトリを共用すると、ファイル名が一致しない可能性がある。

5. リビジョン番号変化問題

デフォルトでは、分岐をマージしたチェンジセットをpushされると、同じブランチでリビジョン番号指すチェンジセットが変化する可能性がある。運用方法によっては違和感を覚えるかも知れない。

ブランチのオプションによって(append_revisions_only = True)、リビジョン番号の変化を防止する事もできるが、今度はリモート/ローカル・ブランチの同期が難しくなる問題が出てくる。つまりリモートからpullすると変更なしで、pushしようとするとmain historyの変更は認められないとエラーになる。

6. ユーティリティも豊富だが、Eclipseプラグインは不調

Windows版のBazaarには、Bazaar ExplorerというGUIツールが同梱されており、コマンドを覚えなくても扱いが容易になっている。TortoiseBzrの動作も快調のようだ。

ただしBzrEclipseの配布バージョンは、Windows環境下では、現時点で動作していないようだ。bzr-xmloutputの開発バージョン0.8.7を入手し、Bazaarのpluginディレクトリの下のxmloutputを置き換えた上で、BzrEclipseのソースコードをダウンロードしてコンパイルしてプラグインを作り直すと、非日本語化Eclipseで動かす事ができる。

なお、Eclipseプラグインに関しては微妙な手違いが重なった結果の状況に感じるので、今後のアップデートで状況は大きく改善すると見込まれる。

7. TracとRedmineとの連係

BazaarはTracとRedmineとは連係できるようだが、あまり実用例がブログ等で公表されていないのが実情。ただしTracの方は、ほぼプラグインの説明書どおりにインストールができた。

8. まとめ

リポジトリ構成がSVNに近いので、SVNの管理者は移行しやすいと思われる。日本語の取り扱いが比較的良好で、分散バージョン管理システムのコミットの気軽さもある。

ただし、GitやMercurialと比較すると、ブランチの取り扱いが煩雑で、あまり先進的な印象は受けない。ローカル側から共有するブランチを作成できないので、リモート・リポジトリの管理者の仕事は多くなる。リリースごとにブランチを切る運用を決めている所は業務にマッチすると思うが、GitやMercurialで対応できない分けでもない。

MercurialとBazaarを比較すると、上記に加えてEclipseプラグインの完成度の違いもあり、Bazaarはリビジョン番号が変化する癖もあるため、総合的に見るとMercurialの方が利便性が高いように感じられる。とは言え大半のプロジェクトでは、Bazaarで不便を感じる事は無いはずだ。

0 コメント:

コメントを投稿