Gitblit 試した
世界のymnkさんのつぶやきで知ったのだけれど,GitblitというオープンソースのGitリポジトリ管理ツールがあったので試してみたよ。
んで,そのGitblitってのが,これ。Javaでできてる。
What is Gitblit?
http://gitblit.com/index.html
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.
サーバ型のツールなので,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サーバ立てられるので,何か機会があったら使ってみよう。:-)