素のgitと自作のhookスクリプトを用いて、リポジトリにpushがあったら 「jenkinsのジョブ起動、redmineのRepository.fetch_changesetsを実行・・・」ということをやっていた。
特定ブランチへのnon fast-forwardなpush禁止をやりたくて、自作することも考えたのだけどgitoliteがやりたいことを網羅していたので移行した。
http://gitolite.com/gitolite/index.html
hook設定
-
gitoliteの管理ユーザ(sshユーザ)の~/.gitolite.rcを変更してhookを使えるようにする
- LOCAL_CODEの部分にコメントで注意書きがあるのでよく読んだうえで。
%RC = ( (略) # コメント外す LOCAL_CODE => “$rc{GL_ADMIN_BASE}/local”, (略) ENABLE => [ (略) # コメント外す ‘repo-specific-hooks’, (略) ] ```
-
gitoliteの管理リポジトリをcheckoutした構造
gitolite-admin/ conf/ gitolite.conf keydir/ user.pub ... local/ hooks/ repo-specific/ myhookname.post-receive*
* gitolite.confに起動するhookと条件を設定
* 使っているhookはpost-receiveフック
repo path/to/repo
option hook.post-receive = myhookname.post-receive
RW = @dev
* 管理リポジトリにconfとhookスクリプトををpushすると配置されるはず。
$HOME/.gitolite/
local/
hooks/
repo-specific/
myhookname.post-receive*
### umask
読取り専用アクセス用にgit-daemonによるリポジトリ公開も行っている。
git-daemonユーザがgitoliteのユーザとは異なるため、gitoliteユーザのhome下の一部についてgroupに対するrxを付与している。
gitoliteのデフォルトはumask 0077動作なので、この状態のままリポジトリを書き換えるとgit-daemonから見えないdir/fileが出来てしまう。~/.gitolite.rcのUMASK設定を変更して027にした。
git-daemon経由でfetchすると一部のコミットやブランチが見えなくなってハマった。
%RC = ( (略) # groupの読み取り可能に UMASK => 0027,
### 環境
* CentOS 5.11 x64
* git 1.7.4.1
* gitolite v3.6.3-10-g4be7ac5
>> Home