意外と面倒なGitサーバの構築

GithubやBitBucketといったサービスの登場もあり、GitやMercurialなどの分散型バージョン管理システムも一般的に利用されるようになってきた。しかし、自分でGitやMercurialを利用可能なサーバを構築しようとすると、さまざまな依存ソフトウェアのインストールや設定が必要で、意外と面倒だ。そのような場合におすすめしたいのが、今回紹介するGitblitだ。

図1 : GitblitのWebサイト

GitblitはJavaで実装されたGitサーバで、Tomcatなどのサーブレットコンテナ上で動作する。内部的にはEclipse Foundationで開発されている「JGit」というGitのJava実装を使用しているため、warファイルをデプロイするだけで利用でき、プラットフォームも問わない。Javaさえインストールされていれば利用可能で、非常に手軽に導入することができるのだ。

Gitblitのインストール

GitblitのWebサイトからwarファイル (本稿執筆時点の最新版はgitblit-1.2.1.war)をダウンロードし、Tomcatなどのサーブレットコンテナにデプロイ (Tomcatであればwarファイルをwebappsディレクトリにコピー)するだけでインストールは完了だ。

なお、GitblitはURLに%2F (「/」をURLエンコードしたもの)を含むパスを使用するが、Tomcatはデフォルトではこのパスに対して400エラーを返すようになっている。そのため、Tomcat起動時のオプションに以下を追加する必要がある。

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

GitblitのWebサイトからは「Gitblit GO」という予めTomcatが同梱されたものも用意されているので、こちらを利用してもいいだろう。

Tomcatを起動し、以下のURLにアクセスすると図2のような画面が表示されるはずだ。

http://localhost:8080/gitblit-1.2.1/

図2 : 起動直後のGitblit

デフォルトではユーザID「admin」、パスワード「admin」でログインできるので、リポジトリやユーザを追加しよう。

Gitblitの主な機能

Gitblitで作成したリポジトリはHTTP経由でクローンすることが可能なので、Gitクライアントさえ用意すればすぐに利用できる。

リポジトリの概要ページには最新のコミット一覧に加え、Githubのようにリポジトリ内にREADME.mdがあればそれを表示することができるため、プロジェクトの概要などを記述しておくといいだろう。

図3 : リポジトリの概要ページ

このほか、リポジトリビューアやフックスクリプトの設定、Luceneを使用したリポジトリの検索、メトリクス、アクセス権限の管理などGitリポジトリを運用する上で必要となる機能は一通り揃っている。フックスクリプトをGroovyで記述できるのはJavaベースのGitblitならではのメリットといえるだろう。

図4 : リポジトリビューア

図5 : ファイルの内容を表示

図6 : コミットログの一覧

図7 : 差分の表示

Githubと比べるとリポジトリのフォークは可能だが、プルリクエストを送ることはできない。コミットログをブランチを含めグラフィカルに表示する機能がないのもやや残念なところだろう。

また、GitblitにはWikiやIssueといった機能は存在しないが、リポジトリ内のMarkdownファイルを抽出してHTML表示する機能があるのでこれで代用が可能だ。Issueについてはticgitというコマンドラインベースのチケット管理システムのチケットを表示する機能があるが、Gitblit側でチケットの登録や更新を行うことができなかったり、ticgit自体のインストールが面倒だったりと手軽に使えるとは言い難い。

まとめ

Webブラウザベースの管理インタフェースを備えたGitサーバを構築するためのプロダクトは他にもGitLabなどが存在するし、TracやRedMineなどと組み合わせて利用する方法もあるが、Gtblitのメリットはなんといっても導入の容易さだろう。他のツールと比較すると確かに不足している機能もあるものの、ちょっとした手間でプラットフォームを問わず導入できるのはやはり大きな魅力だ。

チーム内でGitの導入を考えている場合はGitblitも候補に加えてみてはどうだろうか。