RedmineでGitのリモートリポジトリを参照

Redmineでブラウズの対象とするには local かつ bare なリポジトリでなければならないので、そのままでは使えない。そこでまず対象リポジトリのミラーとなるbareリポジトリを作る。

git clone --bare git://host/path.git
cd path
git remote add --mirror origin git://host/path.git

最近のバージョンの git では clone のオプションに –mirror を直接指定することができるらしいが、1.5.6 では上の手順が必要だった。

# git-1.6.0.6以降
git clone --mirror git://host/path.git

リポジトリを同期するには、ミラーリポジトリ内で fetch を実行する。cronで定期的に実行するよう設定しておけば実用上は十分だろう。

git fetch origin

あとはこのミラーリポジトリのパスをRedmineに設定しておく。

異なるブランチを使用する

Redmineの設定画面にはブランチ名の項目は無い。
lib/redmine/scm/adapters/git_adapter.rb
をチェックしたところ、常に”現在の”ブランチが使用されるようだ。

@branch ||= shellout("#{GIT_BIN} --git-dir #{target('')} branch") { |io| io.grep(/\*/)[0].strip.match(/\* (.*)/)[1] }

改造するのも面倒なので、異なるブランチには異なるリポジトリを割り当てることにした。上と全く同じ手順で bare リポジトリを作った後、HEADファイル内の参照を書き換える(bareリポジトリ なので checkout は使用できない)。

ref: refs/heads/your_branch

fetch の手順などは全く同じで良い。

Leave a Reply