我正在将项目从SVN迁移到Git / Gitolite并且我得到了一个无法解释的行为。配置文件的相关部分是
repo ade
RW = jenkins matt
- dev/USER/master and VREF/NAME/ade/ = @grads
RW+ dev/USER/ = @all
option hook.post-receive = jenkins
我认为这意味着“任何人都可以推送到他们自己的开发分支,只要他们不触摸ade /目录中的任何文件并尝试将其提交给他们的个人主分支”。是对的吗?嗯,好吧,破坏者,这不对,但我看不出我做错了什么。
问题是当我跑
时git clone git@server:ade
git branch foo
git checkout foo
<<edit some file that's not in /ade/ and commit it>>
git push origin foo:dev/tom/foo
它说
remote: FATAL: W VREF/NAME/ade/filename.java ade tom DENIED by VREF/NAME/ade/
remote: error: hook declined to update refs/heads/dev/tom/foo
我不知道为什么。有什么想法吗?
编辑:
解决了问题... sorta。我仍然不知道我做错了什么,但我写了一个似乎做我想做的自定义VREF:
#!/usr/bin/env python
from subprocess import check_output
import sys
if sys.argv[8] in sys.argv[1] and "/".join(sys.argv[9:]) in check_output(["git", "diff-tree", "--no-commit-id", "--name-only", "-r", sys.argv[3]]):
print sys.argv[7]
希望这能为下一个人节省几个小时的头发。