我的服务器上有GITOLITE,我想配置对我的存储库的访问。我想限制某些用户访问某些分支。我尝试了很多变种如何配置gitolite.conf文件,我没有找到解决方案如何限制对某些分支的访问。
1)
@developers1 = user1
@developers2 = user2
repo dbatest
RW+ = @developers1
R test = @developers2
- test = @developers2
RW+ = @developers2
当user2执行命令时:git push origin test
:push success
在gitolite日志中,我有这样一句话:
http ARGV=user2 SOC=git-receive-pack 'dbatest' FROM=10.65.184.239
6453 pre_git dbatest user2 W any refs/.*
6453 system,git,http-backend
6453 END
2)
@developers1 = user1
@developers2 = user2
repo dbatest
RW+ = @developers1
- test = @developers2
RW+ = @developers2
当user2执行命令时:git push origin test
:push success
在gitolite日志中,我有这样一句话:
http ARGV=user2 SOC=git-receive-pack 'dbatest' FROM=10.65.184.239
6457 pre_git dbatest user2 W any refs/.*
6457 system,git,http-backend
6457 END
3)
@developers1 = user1
@developers2 = user2
repo dbatest
RW+ = @developers1
R test = @developers2
- test = @developers2
RW+ = @developers2
option deny-rules = 1
当user2执行命令时:git push origin test
:推送拒绝,他看到了这条消息:
fatal: remote error: FATAL: W any dbatest user2 DENIED by refs/heads/test
(or you mis-spelled the reponame)
在gitolite日志中我有这个:
8161 http ARGV=user2 SOC=git-receive-pack 'dbatest' FROM=10.65.184.239
8161 die W any dbatest user2 DENIED by refs/heads/test<<newline>>(or you mis-spelled the reponame)
它看起来很不错,但是当他试图将某些东西推入主分支时,他就有了这种感觉。
我尝试在我的gitolite配置文件中混合使用这些行,但它们对我没用。
如果有人可以帮助我,我会很高兴。我想限制一些开发人员对某些分支的写访问权限。我不能创建额外的存储库我必须在一个主存储库上使用限制策略。
非常感谢!
答案 0 :(得分:3)
如果我查看official documentation:
repo foo bar
RW+ = alice @teamleads
- master = dilbert @devteam
- refs/tags/v[0-9] = dilbert @devteam
RW+ dev/ = dilbert @devteam
RW = dilbert @devteam
R = @managers
dilbert
和dev
小组有这些限制
they can do anything to branches whose names start with "dev/"
**they can create or fast-forward push, but not rewind or delete, any branch except `master`**
所以这看起来是正确的:
- test = @developers2
RW+ = @developers2
然而,gitolite有两个检查:
- test
),在您的情况下,应该知道ref(test)并且适用deny规则。
您可以通过以下方式跟踪特定规则的逻辑来调试更多:
gitolite access -s dbatest user2 W test
OP Sufelfay确认in the comments 适用于3.5.3,而非3.6.x 。
答案 1 :(得分:2)
我知道这是一个古老的话题,但是最近我做了一些研究,最终到了这里。从顶部的答案快速更新评论。
我正在使用v3.6.4,并且以下解决方案有效:
@teamA = user1 user2
@teamB = user3 user4
repo foo
RW+ = @teamA
R = @teamB
RW+ ref/heads/banana = @teamB
在这种情况下,允许teamB克隆存储库“ foo”,并仅推送到分支“ banana”
答案 2 :(得分:1)
正如Sufelfay在对其他帖子的评论中所说,这是最近版本的Gitolite中的一个错误。
访问检查分为两个阶段。在初始阶段,参考文献是未知的,Gitolite应该跳过参考参考文献的所有规则。
但事实上,它适用所有规则但忽略了ref规范。因此...
- test = @developers2
...被评估为......
- = @developers2
......在第一阶段。更糟糕的是,错误表示最后处理的规则。这条规则可能不相关。
作为解决方法,您可以在拒绝规则之前为any
添加访问规则:
RW any = @developers2
- test = @developers2
...