検索
連載

分散バージョン管理Git/Mercurial/Bazaar徹底比較ユカイ、ツーカイ、カイハツ環境!(3)(3/5 ページ)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

巨大な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をベースにMsysGitCygwinを利用する必要があります。Windows環境でGitを利用するには、若干ノウハウが必要となります。Windows環境での設定については、後述するコラム「GitをWindows環境で利用」をご覧ください。

Gitをサポートするツール

グラフィカルで対話的に操作する「MsysGit」

 MsysGitをインストールすると、Windowsのシェルが拡張されて、Gitリポジトリ上のディレクトリを右クリックで選択すると、図7のようなメニューが表示されます。

図7 ロケーションの選択
図7 MsysGitにより拡張されたフォルダのメニュー

 [Git Bash Here]を選択すると、gitコマンドの実行に必要な環境変数やパスが設定されてbashが起動します。[Git GUI Here]を選択すると、Git GUIが起動し、グラフィカルなUIで対話的にリポジトリの操作をしたり編集履歴を閲覧できます。

図8 gitリポジトリの履歴の閲覧
図8 gitリポジトリの履歴の閲覧

 Git GUIでは日本語環境で利用する際に、日本語のファイル名が文字化けするといった問題があります。また、コマンドラインからのコミットは設定を正しく行わないと、文字化けするので注意が必要です。

Windowsのエクスプローラ用「TortoiseGit」

 TortoiseGitは、Windowsエクスプローラへバージョン管理機能を統合するTortoiseCVS、TortoiseSVNのGit版です。TortoiseGitは本稿執筆時点ではバージョンが0.2.0.0と開発の初期段階にあり、メニューコマンドもほとんど実装されていません。今後の発展が期待されます。

図9 TortoiseGitの画面
図9 TortoiseGitの画面

Qtを使ったGUIクライアント「QGit」

 QGitはGUIツールキットであるQtを利用して開発されたGitのGUIクライアントです。左にファイルツリーを表示して、履歴を見ながら、ファイルの変更点を見ることができるなど、洗練されたUIを持っています(図10)。特に、ファイルを選択すれば、各コミットのファイルの変更個所が一目で見られるのは非常に便利です。

図10 QGitの画面
図10 QGitの画面

 ただし、日本語ファイル名の扱いに問題があり、図10では文字化けしています。

Eclipseプラグイン「EGIT」

 Gitに対応したEclipseプラグインとしてEGITが提供されています(図11図12)。

図11 EGITのメニュー
図11 EGITのメニュー
図12 EGITの[History]ビュー
図12 EGITの[History]ビュー(画像をクリックすると拡大します)

 Git-GUIと同じく、日本語のファイル名が文字化けします。日本語のファイル名のファイルについては、管理対象外となっていて、EGIT上から日本語ファイルを追加すると、Windowsのフォルダで文字化けします。コミットやプッシュ、プルなど基本的な機能は利用できます。

gitコマンドのサーバ機能

 Gitはinstawebコマンドを使うと、リポジトリをWebブラウザから閲覧可能なWebサーバとして公開できます(図13図14)。

図13 Webに公開されたリポジトリ
図13 Webに公開されたリポジトリ
図14 instawebのファイルビューアー
図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でコミットメッセージを入力する必要があり、次の手順に沿って設定する必要があります。

1.シェル上で日本語が入力できるように、/etc/inputrcもしくは~/.inputrcに、次の記述を追加

set kanji-code utf-8
set convert-meta off
set meta-flag on
set output-meta on


2.ページャ(less)のキャラクタセットをUTF-8へ設定するために、/etc/profileもしくは~/.profileへ次の記述を追加

export PAGER="LESSCHARSET=utf-8 less"


3.vi(vim)でコミットメッセージを入力する場合、viで日本語が扱えるように、~/.vimrcに次の記述を追加

set encoding=utf-8
set fileencodings=utf-8,sjis,iso-2022-jp,euc-jp


WindowsのコマンドプロンプトからはUTF-8でメッセージを入力できないため、Poderosaを利用し、ターミナルのエンコーディングを「utf-8」に設定すると、UTF-8でコミットメッセージを入力できます(図15)。

図15 Poderosa上で表示したGitのログ
図15 Poderosa上で表示したGitのログ

ただし、エンコーディングを「utf-8」に設定したPoderosa上でlsコマンドを使ってファイル名が日本語のファイルを表示させると、文字化けするので注意してください。

.git/configファイルにコミットログのエンコーディングを指定するオプションがあり、これに「sjis」を指定することにより、コマンドライン上では文字化けを防げますが、instaweb、Git-Guiでログを表示すると文字化けします。本来ならば、configファイルのエンコーディングオプションを利用してこれらのツールがコミットメッセージをハンドリングすべきですが、ツールによってはコミットメッセージをUTF-8であると仮定して処理を行っているため、問題が出るようです。

最近のLinuxやUNIX上でGitを利用する場合、デフォルトのシステムエンコーディングがUTF-8のためWindowsのような問題は発生しにくくなっています。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る