gitの中央repos運用時のパーミッションの調整

gitで、bareな中央reposにpushしたい。

使うプロトコルは:

  • http:// は遅いのでいや
  • git:// はgit-daemon的に認証がちょっとやわそうなのでいまいち
    • いい方法があったら教えてください><
  • pushする人らはsshアカウントがあるので、git+ssh:// でいいや

複数ユーザがpushするので、パーミッションに気を使わなければならない:

  • 共通のグループ(例:sandbox)に属させて、chown -R root:sandbox sandbox.git; chmod -R g+w sandbox; find sandbox -type d|xargs chmod 2775 すればグループの統一はOK
  • 問題は sandbox.git/objects/ 下とかに新規で作られるディレクトリのパーミッション
    • ~/.bashrcでumask 002すればいいんだけど、皆がしてくれるとは限らない。

と思って、git-init を見たらこんなのが

    • shared[={false|true|umask|group|all|world|everybody|0xxx}]

...
group (or true): Make the repository group-writable, (and g+sx, since the git group may be not the primary group of all users).

git-init(1)

git-initの--shareは、core.sharedRepository だそうなので、bare reposなsandbox.git/configの[core]セクションにsharedRepository = groupを追加したら、(ユーザのumaskの設定に依らずに)ちゃんと 2775 なディレクトリが作られるようになりましたとさ。Enjoy!