入門Git

素の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