
ユカイ、ツーカイ、カイハツ環境!(3)
分散バージョン管理Git/Mercurial/Bazaar徹底比較
岡本 隆史
2009/1/14
巨大なLinuxカーネルを管理するために生まれたGit
■ Gitの概要と特徴
Linuxカーネルは「BitKeeper」と呼ばれるバージョン管理システムを長らく利用していましたが、ライセンスの問題でBitKeeperがLinuxの開発で無償で利用できなくなりました。この問題がきっかけで、GitはLinuxカーネルの開発者であるLinus TorvaldsによりBitKeeperの代替ソフトウェアとして開発されました(参考:BitKeeperからgitへ、ソースコード管理ツール大変更)。
リリースを公開後、次第にLinux以外のプロジェクトでも採用されていて、UNIX系OSのウィンドウシステムのX.orgやUNIXサーバでWindowsのファイルサーバを実現するSambaなどで採用されています。先日公開されたGoogleによる携帯プラットフォームであるGoogle AndroidのリポジトリもGitにより公開されました。RubyによるWebアプリケーション開発環境であるRuby on RailsがSVNからGitに移行したことでも注目されており、Rubyの開発者の間でもGit採用の動きが進んでいるようです。最近では、Perl 5でも採用と発表され話題になりました。
Gitは、今回紹介するツールの中で最も歴史が古く、機能も充実しています。また、「Distributed Version Control Systems: A Not-So-Quick Guide Through」によると、後で紹介するBazaar、Mercurialと比べ、高速に動作するようです。
不具合の追跡を行うBisect機能、複数のコミットを1つのコミットとして扱うRebase機能、現在の作業を一時中断し割り込みの作業を行った後、元の作業に戻るStatsh機能などがあります。超大規模なLinuxカーネルの開発者のために作られ始めただけあって、ギーク向けの機能は最も豊富にそろっています。
採用プロジェクト数はMercurialやBazaarに比べると最も多く、実績が豊富なのも検討するうえで心強い味方となります。世界最大級のオープンソースソフトウェアであるLinuxカーネルが採用していることは、誰しもが納得のいく理由となるでしょう。
ただし、Windowsへの対応はほかのツールに比べ後れを取っていて、標準ではWindowsはサポートされません。GitをベースにMsysGitやCygwinを利用する必要があります。Windows環境でGitを利用するには、若干ノウハウが必要となります。Windows環境での設定については、後述するコラム「GitをWindows環境で利用」をご覧ください。
■ Gitをサポートするツール
□ グラフィカルで対話的に操作する「MsysGit」
MsysGitをインストールすると、Windowsのシェルが拡張されて、Gitリポジトリ上のディレクトリを右クリックで選択すると、図7のようなメニューが表示されます。
![]() |
| 図7 MsysGitにより拡張されたフォルダのメニュー |
[Git Bash Here]を選択すると、gitコマンドの実行に必要な環境変数やパスが設定されてbashが起動します。[Git GUI Here]を選択すると、Git GUIが起動し、グラフィカルなUIで対話的にリポジトリの操作をしたり編集履歴を閲覧できます。
![]() |
| 図8 gitリポジトリの履歴の閲覧 |
Git GUIでは日本語環境で利用する際に、日本語のファイル名が文字化けするといった問題があります。また、コマンドラインからのコミットは設定を正しく行わないと、文字化けするので注意が必要です。
□ Windowsのエクスプローラ用「TortoiseGit」
TortoiseGitは、Windowsエクスプローラへバージョン管理機能を統合するTortoiseCVS、TortoiseSVNのGit版です。TortoiseGitは本稿執筆時点ではバージョンが0.2.0.0と開発の初期段階にあり、メニューコマンドもほとんど実装されていません。今後の発展が期待されます。
![]() |
| 図9 TortoiseGitの画面 |
□ Qtを使ったGUIクライアント「QGit」
QGitはGUIツールキットであるQtを利用して開発されたGitのGUIクライアントです。左にファイルツリーを表示して、履歴を見ながら、ファイルの変更点を見ることができるなど、洗練されたUIを持っています(図10)。特に、ファイルを選択すれば、各コミットのファイルの変更個所が一目で見られるのは非常に便利です。
![]() |
| 図10 QGitの画面 |
ただし、日本語ファイル名の扱いに問題があり、図10では文字化けしています。
□ Eclipseプラグイン「EGIT」
Gitに対応したEclipseプラグインとしてEGITが提供されています(図11、図12)。
![]() |
| 図11 EGITのメニュー |
![]() |
| 図12 EGITの[History]ビュー(画像をクリックすると拡大します) |
Git-GUIと同じく、日本語のファイル名が文字化けします。日本語のファイル名のファイルについては、管理対象外となっていて、EGIT上から日本語ファイルを追加すると、Windowsのフォルダで文字化けします。コミットやプッシュ、プルなど基本的な機能は利用できます。
■ gitコマンドのサーバ機能
Gitはinstawebコマンドを使うと、リポジトリをWebブラウザから閲覧可能なWebサーバとして公開できます(図13、図14)。
![]() |
| 図13 Webに公開されたリポジトリ |
![]() |
| 図14 instawebのファイルビューアー |
instawebはWebブラウザでの閲覧用にファイルを公開するのみで、ここからチェックアウトすることはできません。Windows環境でinstawebを利用してコミットメッセージを正しく表示するには、UTF-8でコミットメッセージをコミットする必要があります。
引き続き次ページではMercurialとBazaarを紹介します。
コラム 「GitをWindows環境で利用するには?」 |
|||||
| GitをWindowsのコマンドラインで利用するには、Windows向けにポーティングされたMsysGitかWindows環境にGNU環境を提供するCygwinのどちらかを利用する必要があります。 MsysGitには、gitコマンドのほかにGUIツールが付属していますが、コマンドラインで利用する場合、SVNサポートやWebで公開するためのinstaweb機能を備えたCygwin版を利用した方が便利です。ただし、日本語のキャラクタセットを正しく扱うにはUTF-8でコミットメッセージを入力する必要があり、次の手順に沿って設定する必要があります。
ただし、エンコーディングを「utf-8」に設定したPoderosa上でlsコマンドを使ってファイル名が日本語のファイルを表示させると、文字化けするので注意してください。 .git/configファイルにコミットログのエンコーディングを指定するオプションがあり、これに「sjis」を指定することにより、コマンドライン上では文字化けを防げますが、instaweb、Git-Guiでログを表示すると文字化けします。本来ならば、configファイルのエンコーディングオプションを利用してこれらのツールがコミットメッセージをハンドリングすべきですが、ツールによってはコミットメッセージをUTF-8であると仮定して処理を行っているため、問題が出るようです。 最近のLinuxやUNIX上でGitを利用する場合、デフォルトのシステムエンコーディングがUTF-8のためWindowsのような問題は発生しにくくなっています。 |
| Index | ||||||||||||
|
||||||||||||
ユカイ、ツーカイ、カイハツ環境! バックナンバー 連載インデックスへ»
- 第1回 Trac Lightningで始めるチケット式開発「電撃」入門
- 第2回 SubversionとTracでファイル管理の“迷宮”から脱出
- 第3回 分散バージョン管理Git/Mercurial/Bazaar徹底比較
- 第4回 Aptanaなら開発環境とクラウドの連携が超お手軽!
- 第5回 App Engine/AptanaなどJavaクラウド4つを徹底比較
- 第6回 Eclipse 3.5 Galileoの「実に面白い」新機能とは
- 第7回 ブラウザを選ばずWebテストを自動化するSelenium
- 第8回 JUnit/FindBugs/PMDなどを総観できるQALab/Limy
- 第9回 Googlerも使っているIntelliJ IDEAのOSS版を試す
- 第10回 Webのバグを燃やしまくるFirebugと、そのアドオン7選
- 第11回 DB設計の神ツール「ERMaster」なら、ここまでできる
- 第12回 AWS ToolkitでTomcatクラスタをEC2上に楽々構築
- 第13回 究極の問題解析ツール、逆コンパイラJD-Eclipseとは
- 第14回 AzureのストレージをJavaで扱えるWindowsAzure4j
- 第15回 Java EE 6/Tomcat 7/Gitに対応したEclipse 3.6
- 第16回 単体テストを“神速”化するQuick JUnitとMockito
- 第17回 コード探知機「Sonar」でプロジェクトの深海を探れ!
- 第18回 Team Foundation ServerでJava開発は大丈夫か?
- 第19回 Review Boardならコードレビューを効率良くできる!
- 第20回 Bazaarでござ〜る。猿でもできる分散バージョン管理
- 第21回 「Hudson」改め「Jenkins」で始めるCI入門
- 第22回 Ant使いでもMavenのライブラリ管理ができるIvyとは
- 第23回 AWSの自由自在なPaaS「Elastic Beanstalk」とは
- 第24回 Eclipse 3.7 Indigo公開、e4、Orion、そしてクラウドへ
- 第25回 Java開発者が知らないと損するPaaSクラウド8選
- 第26回 Git管理の神ツール「Gitolite」なら、ここまでできる!
| Java Solution全記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -







![図12 EGITの[History]ビュー](12.gif)


