ユカイ、ツーカイ、カイハツ環境!
連載インデックスへ
ユカイ、ツーカイ、カイハツ環境!(3)

分散バージョン管理Git/Mercurial/Bazaar徹底比較


岡本 隆史
2009/1/14


分散バージョン管理システムの覇者は?

 コマンドラインで使う分には、達人が使うのでなければ、どのツールも正直あまり代わり映えがしません。一般的な開発者の多くは開発環境として日本語版のWindowsを利用していると思われるので、日本語版のWindows上の環境での状況を中心に各ツールを比較してみます。

表 SVN、Git、Mercurial、Bazaarの機能比較
主な特徴 SVN Git Mercurial Bazaar
最新バージョン(2008年12月現在) 1.5.4 1.6.0.4 1.1 1.10
ライセンス ASL 2 GPL v2 GPL v2 GPL v2
集中型/分散型 集中型 分散型 分散型 分散型
代表的な採用プロジェクト 多数 Linuxカーネル、
Ruby on Rails、
Android、X.org、
Samba、Wine、
Perl 5、そのほか
OpenJDK、
Mozilla、
OpenSolaris、
NetBeans、
Xen、そのほか
Ubuntu、
Mailman、
MySQL、
そのほか
日本語サポート(※比較ポイント【1】)
Windows対応(※比較ポイント【2】)
GUIツールWindows TortoiseSVN、
RapidSVN
TortoiseGit(0.2.0.0)、
git-gui、gitk、qgit
TortoiseHG(0.5)、
Hgtk
bzr-gtk、qbzr
GUIツールLinux RapidSVN qgit、git-gui、gitk Hgtk、hgct bzr-gtk、qbzr
Eclipseサポート(※比較ポイント【3】) Subversive(0.7.4)、
Subclipse(1.4.5)
EGIT
(0.3.1)
Mercurial Eclipes
(1.2)
bzr-eclipse
(1.1.0)
VisualStudioプラグイン AnkhSVN(2.0) × Mercurial SCC plugin for MS Visual Studio
(1.0.1)
×
Tracプラグイン
(プラグインでサポート)

(プラグインでサポート)

(プラグインでサポート)
SVNとの連携
(git-svnをインストールすれば可能)
△(hgsvnをインストールすれば可能。
hgのリポジトリの変更点をSVN側へ反映するにはSVNを利用)
記述言語 C、
Java(SVNKit)
C Python Python
ファイル名変更時の変更履歴の引き継ぎ ×  
Rebase機能 ×
(bzr-rebaseプラグインで対応)
Bisect機能 ×
(Bazaar Bisectプラグインで対応)
Shelve/Unshelve ×
(git stash)

(hgshelveエクステンション)
パッチマネージャ ×
(guilt)

(Mercurial Queue)
×
メール送信可能なパッチ作成 ×
(Patchbombエクステンション)
電子署名付きチェンジセット ×
(タグのみ可能)

(GPGエクステンション)
組み込みサーバ
(git instawebにより可能。
ただしWebブラウザでの閲覧のみ)
○(hg serve) ○(bzr serve)
HTTPプロトコルでの共有方法 WebDAV WebDAV、
git instawebコマンド
CGI、hg
serveコマンド
CGI/WebDAV
(WebDAVはWebDAVプラグインにより対応)
中央リポジトリ利用時のアクセス制御(※比較ポイント【4】) ファイル/ディレクトリ単位で設定可能。
read/write権限の設定まで可能
リポジトリ単位で設定可能 ファイル/ディレクトリ単位で設定可能。
ユーザー別のread/writeの設定は不可
リポジトリ単位で設定可能
無料リポジトリ 多数 GitHub、
assembla、
SouceForge.JP、
CodeRepos
itbucket、
assembla、
ProjectKenai、
freeHg.org
Launchpad

 この表を基に、5つのポイントから比較してみましょう。

比較ポイント【1】日本語化環境での利用

 GitはWindows上のgitコマンドで文字化けしないように利用するために、コラムで紹介したような工夫が必要でした。また、ファイル名に日本語を利用した場合、WindowsとUNIX環境が混在するとファイル名が文字化けします。EGITでも日本語のファイルは正しく扱えません。

 Mercurialではコミットメッセージは特に設定は必要なく、文字化けも起こりません。ただし、Windows/UNIX混在環境ではファイル名が文字化けします。また、Mercurial Eclipseの[History]ビューを見ると文字化けしています。

 Bazaarのみがコミットメッセージ、ファイル名ともにマルチバイト文字の処理をしていて、日本語のファイル名をWindowsやLinuxのようなシステムのエンコーディングが異なる環境間でリポジトリを共有しても正しく扱えます。しかし、Eclipse環境では日本語のファイル名のファイルを正しく扱えませんでした。

 日本語環境での利用はどれも何かしら問題があり、甲乙付け難いですが、bzr本体で完全な処理を行っているBazaarが優勢といったところでしょうか。

比較ポイント【2】Windows環境での利用

 Windows上の環境としては、基本的にすべてCygwinで利用可能です。Cygwin以外でのサポートについては、TortoiseBzrとTortoiseHgを提供しているBazaarとMercurialが一歩抜きんでています。

 GitもTortoiseGitを提供していますが、開発の極めて初期段階であり、現時点では実用的ではありませんでした。Windows専用のビルドツールであるMsysGitを利用するとGit GUIが同梱されてきますが、Windowsシェルとの統合機能はなく、専用クライアントでの利用となります。SVN連携機能は2008年12月の執筆時のバージョンではサポートされていませんでした。

比較ポイント【3】Eclipse上での利用

 Eclipse上の開発環境としては、GitとBazaarはリポジトリ管理下にあるファイルや、リポジトリ上のファイルから変更されたファイルにアイコンが付くなど、Mercurialに比べると優れています。

 セットアップの簡便さとしては、BazaarとMercurialはコマンドラインのツールをインストールし、コマンドラインのコマンドへパスを設定する必要があります。さらに、Bazaarは「xmloutputプラグイン」を追加でインストールする必要がありました。GitはJavaクライアントが組み込まれており、インストールしてすぐに利用できます。

 Mercurialは日本語のコミットメッセージが文字化けし、ファイルの状態がアイコンで表示されないため、BazaarやGitに比べると日本語環境での利用で問題がありそうですが、メニューからのオペレーションは最も豊富です。また、日本語のファイル名を正しく扱えるのはMercurial Eclipseだけです。

 英数字のファイル名のソースコードだけを扱うのであれば導入が楽なGit、日本語のファイル名のファイルを扱うのであればMercurial Eclipseが有利です。

比較ポイント【4】アクセス制御

 GitとBazaarはリポジトリ単位のアクセス制御しか設定できません。Mercurialはディレクトリ/ファイル単位でアクセス制御を設定可能です。しかしながら、アクセスの可否だけでread/writeなどSVNのように細かい設定はできません。

比較ポイント【5】拡張性

 BazaarとMercurialはPythonでモジュールを作成し、プラグイン(エクステンション、機能拡張)としてインストールすることで簡単に機能拡張できます。

 一方、GitはC言語で記述された低レベルコマンドとシェルスクリプトやPerlスクリプトで記述されたハイレベルコマンドから構成されています。これらのコマンドを利用したスクリプトを追加することにより、拡張できるようになっています。アーキテクチャ的にはGitはUNIXの洗練された考え方を受け継いでおり、コマンドをスクリプトで組み合わせて新しい機能を実装します。

そのほか

 先進的な機能はまずGitに実装され、Mercurial、Bazaarが追従しているといった感じです。Rebase機能やBisect機能は少し前まではGitのウリとされてきましたが、現在ではMercurialもBazaarも同等の機能を利用できます。機能的にはどれもどんぐりの背比べと感じました。

いまこそ分散型に移行すべき? Subversionと共存?

 本稿では、メジャーとなりつつある分散バージョン管理システムとしてMercurial、Git、Bazaarを比較紹介してきました。どのツールも甲乙付け難く、どれを使うべきとはいえない状況です。世の中のシェアを見ると、Git>Mercurial>Bazaarというふうに、Gitが最も使われていますが、日本語とWindows環境のサポートがいま一歩です。個人的には、国際化サポートがしっかりしているBazaarをお勧めしたいところですが、将来的にはGit、Mercurialでもこれらの問題は解決されると思われます。

 分散バージョン管理システムを利用した場合でも、成果物を共有するよりどころとして中央リポジトリは必要となります。現時点では、中央リポジトリとしてSVNを利用し、各自の作業を行うローカルリポジトリに分散バージョン管理システムを利用するのがベストだと筆者は考えています。各自のローカルリポジトリを管理するツールを変更するのであれば、中央リポジトリへは影響を与えないので、後々ツールを変更してもオーバーヘッドにはなりません。

 新しくツールを覚えたくない開発者はSVNのクライアントを従来どおり利用できます。ロック処理やサーバの細かいアクセス制御などのSVNのメリットを得ながら、分散バージョン管理システムが有利な場面では、分散バージョン管理システムを併用し、まずは適用しやすい場面や開発者から導入を始めてみてはいかがでしょうか。

 最後になりますが、本稿を執筆するに当たり、Debianで日々Gitを使っている上川純一氏にご協力をいただきました。上川氏にご協力いただいたとはいえ、本稿に誤りがある場合は責任の一切は筆者と@IT編集部にありますのでご了承ください。

@IT関連記事


ソースコード管理システムgitにライバル出現
連載:Linux Kernel Watch 6月版
 Linusが開発したgitにライバル出現。また、シリアルコンソールで顕在化したwatchdog問題やRAWデバイス廃止論まで、トピック満載
Linux Square」フォーラム 2005/6/21
gitベースのカーネル2.6.12に問題発生!?
連載:Linux Kernel Watch 7月版
 gitベースによる初の安定版カーネル2.6.12が登場。リリース自体はうまくいったものの、混乱も発生。そして、devfsの議論は大詰めに
Linux Square」フォーラム 2005/7/26
バージョン管理に便利なSubversiveプラグイン
CoolなEclipseプラグイン(15) 
バージョン管理といえばCVSが有名ですが、もっと便利なものがあるって、知ってましたか? SubversionとTracで開発を「見える化」しよう!

Java Solution」フォーラム 2007/3/2
Subversionによるバージョン管理
Apache 2.0でWebDAV(後編) DeltaVがRFCとしてリリースされ、WebDAVのバージョン管理機能も足元か固まった。DeltaVの実装である「Subversion」を導入しよう
Linux Square」フォーラム 2002/7/13
ソースコードの宝石箱、●●Forgeを見逃すなかれ
安藤幸央のランダウン(39)
 開発ホスティングサービスを知っていますか? ソースコードが満載でWeb上のDB操作やコンパイル、管理機能、CMSなど便利な機能が無料です
Java Solution」フォーラム 2008/3/18

オープンソースで始めるバージョン管理

 バージョン管理ソフトって高価だし、何だか面倒くさい……。そんな.NET開発者はまずはオープンソース・ソフトを試してみよう

最終更新 2008/10/14
チーム開発におけるバージョン管理の活用方法
連載:Team Foundation Server 2008の適用
 TFSのバージョン管理機能にはどんな特徴があるのか? どのよう使えばよいのか? 現場で使えるノウハウを解説する
Insider.NET」フォーラム 2008/12/26

1-2-3-4-5
 

 Index
第3回 分散バージョン管理Git/Mercurial/Bazaar徹底比較
  Page1
Subversionとは一味違う「分散バージョン管理」とは?
分散型の7つのメリット
  Page2
コラム 「分散型特有ではないが、こんな5つの機能も」
分散型はデメリットも7つ……
  Page3
巨大なLinuxカーネルを管理するために生まれたGit
コラム 「GitをWindows環境で利用するには?」
  Page4
Pythonで機能が拡張できるMercurial
完全な国際化対応と正確な操作が決め手のBazaar
Page5
分散バージョン管理システムの覇者は?
いまこそ分散型に移行すべき? Subversionと共存?


ユカイ、ツーカイ、カイハツ環境! バックナンバー 連載インデックスへ»




Java Solution全記事一覧



TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH