Gitblit 試した

世界のymnkさんのつぶやきで知ったのだけれど,GitblitというオープンソースのGitリポジトリ管理ツールがあったので試してみたよ。



んで,そのGitblitってのが,これ。Javaでできてる。

What is Gitblit?
Gitblit is an open-source, pure Java stack for managing, viewing, and serving Git repositories.
It's designed primarily as a tool for small workgroups who want to host centralized repositories.

http://gitblit.com/index.html


サーバ型のツールなので,warファイル(Gitblit WAR)かTomcat付きのスタンドアロン版(Gitblit GO)のどちらかを入手する。サクっと試してみたかったのでスタンドアロン版を入手。
スタンドアロン版を入手したら,適当なディレクトリに解凍。インストーラみたいなのは無いけど,自分で設定ファイル(gitblit.properties)を編集しておく必要があるみたい(設定用のUIはまだ無い。
最低限やっておくことは,

  • gitリポジトリの場所の指定(git.repositoriesFolder
  • HTTPポートの有効化(server.httpPort

の2つくらい(初期設定では,HTTPが無効でHTTPSだけ有効になっている)。


"git.searchRepositoriesSubfolders = true"になっているので,git.repositoriesFolderで指定したディレクトリに,それぞれgitリポジトリが作られていくイメージ。たとえば,こんな感じに設定した(それ以外はデフォルトのまま。

git.repositoriesFolder = /temp/git/
server.httpPort = 8080

その他の詳しい設定手順は,こちらを参照のこと。→ Gitblit Setup


設定が一通り終わったら,gitblit.cmdを叩いて起動する。java.exeがPATHに通っていれば無事起動できるはずよ。JGitを使っているのでgitコマンドが不要なのが良いところ。あと,日本語化してあった。どなたが翻訳してくれたのか知りませんが,ありがたいことです。


Gitblit経由でログみたり,リポジトリ作れたりするので「git使ってみたいけど,サーバ立てるのどうすんだろ?」って人(つまり,自分のことだな)には向いてると思う,お手軽だし。ケチつけるとしたら,ログにブランチグラフが表示されないのが残念なくらい。


それとリポジトリを作る事はできるけど,Githubみたく既存のリポジトリをforkしたり,pull request送ったりはできないみたい。そういった点では,Gitoriousの方が便利なのかも知れない(使ったことないから知らない。


Javaベースのツールってなんか敬遠されがちだけど,JRE/JDKだけ入ってれば,プラットフォームに関わらず,ほぼノートラブルでインストールできるって魅力的よ。Gitblitは,DBもgitコマンドも必要としないので,Jenkins並に楽ちんだった。
#試してないけど,リポジトリのフックスクリプトがgroovyで書けるってのもポイント高め。:-)


あと,なんだかよく分かってないけどフェデレーション(federation:連邦)って機能がある。どうも,Gitblitインスタンス間でリポジトリのコピー(clone/pull)を行う機能みたい。便利かどうかわかんないけど,やり方があまり親切じゃ無かったので,その手順を残しておく。


前準備
・Gitblitのインスタンスを複数用意する
・cloneされる側(オリジン)のGitblitのgitblit.propertiesに以下の設定を加える

git.enableGitServlet=true
federation.passphrase=なんか適当な文字列

・cloneする側のGitblitのgitblit.propertiesに以下の設定を加える

federation.allowProposals = true

このあと,双方のGitblitを一旦再起動。


clone要求
cloneされる側(オリジン)のGitblitから,federation画面に移り,適当なトークンの"propse"リンクを押す(all repositories, & users, & settingsと3つあるけど,よく分かってないので,all repositoriesで試してみた。


"send to"にcloneしてもらいたいGitblitのアドレス入れて "propose" ボタンを押す。これで,オリジン側の作業はおしまい。


cloneする側のGitblitに移ると「フェデレーション要求来てるよ」ってメッセージが表示されているので,こちらも federation画面に移る。


受け入れるかどうかレビューせい,というのだけれど,どうしたらいいか分からない。どうも,リクエストの詳細画面に移って,proposalの値(赤枠で囲ったところ)をgitblit.propertiesにコピペするのが正解っぽい。コピペしたら,Gitblitは再起動。でもってproposalを削除しとく(なんかカッコ悪い。


再起動後,しばらくすると最初のコピー(clone)がはじまる。あとは定期的にpullを行うらしい。連携そのものは「へぇーおもしろいなー」って感じなんだけど,実際なんに使うか考えると,ちょっと悩んでしまう。複数のGitblitインスタンスをまとめてフェデレーションすると,何かしら使い道も思いつくのだろうか?(単なるバックアップには大げさな気がする...。
あと,フェデレーションでコピーした(cloneした)リポジトリはステータスが「凍結」になってて,pushできないみたい。


フェデレーションはさておき,お手軽にgitサーバ立てられるので,何か機会があったら使ってみよう。:-)