1

我正在将一个项目从 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

我不知道为什么。有任何想法吗?

编辑:

解决了这个问题......有点。我仍然不知道我做错了什么,但我写了一个自定义 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]

希望这可以为下一个人节省几个小时的拉头发时间。

4

0 回答 0