「Git のリポジトリブラウザって何かない?」ということで確認してみた。
ちなみに・・・ Git 本体にも gitweb というリポジトリをブラウズできる cgi スクリプトが付属している。リポジトリのルートディレクトリで、
$ git instaweb --httpd webrick
[2009-07-19 00:06:10] INFO WEBrick 1.3.1
[2009-07-19 00:06:10] INFO ruby 1.8.6 (2008-08-11) [i686-darwin9.6.0]
とやると起動してくれる。詳細はヘルプで。
$ git help instaweb
デフォルトでは、HTTP サーバは、lighttpd
が使用される。上記は、webrick
を指定して起動させている状態。apache2
もサポートされているようだ。
これはこれですぐに使えて、質素ではあるが、必要充分な機能が含まれていてよい。 また、Redmine でも SCM (Software Configuration Management) として Git を使える。
- 複数のリポジトリをまとめてブラウジングしたいんだけど・・・
- カスタマイズしたいんだけど・・・
- プロジェクトとの紐付けは別でやるから、とりあえずリポジトリ主体で・・・
というリクエストもあり、別のものも探してみることにした。
Table of Contents
Open Table of Contents
Ginatra とは
Git のリポジトリブラウザになる。名前からもわかるように、Sinatra をベースに作成された Web アプリケーションになる。
上記サイトにも書かれているように、Ruby + Sinatra で書かれた gitweb のクローンであり、現時点、gitweb の全ての機能を実装してはいない。まだまだこれからのアプリではある。
インストールと設定
git のバージョンは、1.6.3 以上が必要と記載されている。
$ git --version
git version 1.6.1.2
1.6.1 だが、まずはこれで試してみよう。
必要な gem のインストール。
$ sudo gem install grit kematzy-sinatra-cache coderay
もし、gem のソースとして、http://gems.github.com を含めていない場合は、含めておく。
$ gem sources
*** CURRENT SOURCES ***
http://gems.rubyforge.org/
$ gem sources -a http://gems.github.com
http://gems.github.com added to sources
$ gem sources
*** CURRENT SOURCES ***
http://gems.rubyforge.org/
http://gems.github.com
テストスイートとしては、rspec、cucumber、rack-test を使用しているようなので、これも入れておく。
$ sudo gem install rspec webrat rack-test cucumber
Ginatra 本体をインストールする。と言っても、GitHub から git clone
するか、
git プロトコルが使用できない環境にいる場合には、lenary’s ginatra at master - GitHub からアーカイブを取得する。
$ git clone git://github.com/lenary/ginatra.git
インストールは以上。
ローカルでさくっと動かす分には、公開リポジトリだけ用意しておけばよい。
環境の前提。
- Ginatra HOME
/home/hoge/apps/ginatra
- 個人用のリポジトリ(既にあるものとする)
/home/hoge/repos/repos1
個人用のリポジトリから公開リポジトリを作成する。
$ cd /home/hoge/apps/ginatra/repos
$ git clone --bare /home/hoge/repos/repos1 repos1.git
Ginatra のホームディレクトリ配下にあるrepos
ディレクトリに移動して、個人用のリポジトリから公開リポジトリの作成を行っている。
この公開リポジトリの作成には、rake タスクも用意されている。
$ rake -T | grep add
rake add # Adds a Git Repository to Ginatra.
Ginatra の repos
配下に配置するリポジトリのディレクトリ名称は、慣習にならって .git
がディレクトリ名のお尻になっている必要がある。Ginatra はその名称のみしか認識しない。
起動して触ってみる
$ cd /home/hoge/apps/ginatra
$ ruby ginatra.rb
== Sinatra/0.9.2 has taken the stage on 4567 for development with backup from Thin
http://localhost:4567/ にアクセスする。
2 つのリポジトリが見えている。先程追加を行った “repos1” リポジトリと、先に入れていた “mephisto” リポジトリの 2 つだ。
“repos1” リポジトリを覗いてみる。
コミットオブジェクトの一覧が表示され、右側に Heads、Tags というボックスも見え、ブランチの切り替え、タグの切り替えもすぐにできるようだ。
最新のコミットを覗いてみる。
コミットオブジェクトのサマリが表示されている。git show
で確認できる内容だ。
右側にあるボックスの内容について。
- “commit:”
- 自分自身のコミットオブジェクトの名称。
- “tree:”
- このコミットオブジェクトのルートツリーオブジェクト。
- オブジェクト名称(“0efa4e68c517ffe2e6a7d895e64c9ee36f00e88f”)をクリックすると、ツリーオブジェクトの抱えているものが展開される。
- 具体的には、実体のルートディレクトリの内容が表示される。
- “parent:”
- このコミットオブジェクトの 1 つ前のコミットオブジェクト。
“tree: 0efa4e68c517ffe2e6a7d895e64c9ee36f00e88f” をクリックすると、以下の画面になる。
リスト表示されているファイル名称は、Blob オブジェクトの名称になっており、クリックするとそのデータ、つまりはコミットされている実体ファイルの内容が参照できる。
感想
まだまだこれからのアプリではあるが、ソースもシンプルになっており、
- Sinatra の使い方を学ぶ題材
- Git レポジトリの Ruby バインディングである Grit を学ぶ題材
にもちょうどよく、しばらく追っかけてみようかなと、思えるアプリだ。
でも紹介されていた。