在分支上的Gitolite权限

11

我真的很困惑。我已经阅读了相当多的例子,并尝试了所有这些例子。最基本的例子可以正常工作,但每当我尝试转移到更复杂的内容时,一切都崩溃了(即使我直接复制示例)。另外,记录一下,我的gitolite版本是3,服务器会显示:

    this is gitolite@ubuntuserver running gitolite3 v3.1-2-g3eefc06 on git 1.7.9.5         

所有这些说的,我正在努力实现的(我认为)相对简单。我有一组初级开发人员 [@scrubs],我只希望他们创建并提交到新分支,并能够阅读/拉取主分支。这样我就可以在合并之前审查他们的代码。

我有一组高级开发人员 [@vets],我希望他们完全自由。

我的配置文件如下:

     @scrubs         = al ted matthew
     @vets           = kevin will guy

     @offlimitbranches = master$

     repo    gitolite-admin
             RW+     =   @vets matthew

     repo    dawebsite
             RW+                     =   @vets
             -   @offlimitbranches   =   @scrubs
             RW+                     =   @scrubs
             R   @offlimitbranches   =   @scrubs
             R                       =   daemon
             option deny-rules = 1

     dawebsite "Owner"               = "This is THE site"

我注意到在添加了以下内容之前,拒绝功能完全没有起作用:

    option deny-rules = 1

在其中的20个例子中,我认为只有一个例子是正确的(有点牢骚,请原谅我的挫败感)。

使用当前设置,兽医可以按预期执行任何操作。

护士无法将代码推送到主分支,也无法从主分支拉取代码(我认为这是因为它会尝试匹配可能的第一个规则?)。同时,护士也不能将代码推送到任何非主分支,也不能推送新创建的分支。每次尝试都返回相同的消息“FATAL:[R/W] any dawebsite matthew DENIED by refs/heads/master$”。

我已尝试使用master,master$,@offlimitbranches甚至是refs/heads/master来引用分支,但均未成功。

如果有人能够帮助我澄清这个问题,我会非常感激。

更新**

经过一些尝试,我发现如果将matthew从护士组中移除,并直接操作他,则可以成功。

    -       master$         =   matthew
    RW+                     =   matthew

如果他切换到一个新分支并尝试以下操作:(感谢VonC关于日志的提示)

git pull origin newBranch
git push origin newBranch
每个都返回错误。 拉(PULL):
ARGV=matthew    SOC=git-upload-pack 'dawebsite.git'     FROM=172.24.1.198
access(dawebsite, matthew, R, 'any'),-> R any dawebsite matthew DENIED by refs/heads/master$
trigger,Writable,access_1,ACCESS_1,dawebsite,matthew,R,any,R any dawebsite,matthew DENIED by refs/heads/master$
R any dawebsite matthew DENIED by refs/heads/master$<<newline>>(or you mis-spelled the reponame)

PUSH:

ARGV=matthew    SOC=git-receive-pack 'dawebsite.git'    FROM=172.24.1.198
access(dawebsite, matthew, W, 'any'),-> W any medehrdev matthew DENIED by refs/heads/master$
trigger,Writable,access_1,ACCESS_1,dawebsite,matthew,W,any,W any dawebsite matthew DENIED by refs/heads/master$
W any dawebsite matthew DENIED by refs/heads/master$<<newline>>(or you mis-spelled the reponame)

似乎我的所有分支都与 master$ 引用匹配,这是因为它们全部派生自 master 分支吗?


1
每当您遇到被拒绝的命令时,请尝试查看 gitolite 的 日志(位于 .gitolite 目录中),它可以帮助您了解为什么 gitolite 选择拒绝该命令。 - VonC
1
你不能拒绝你的@scrubs阅读任何分支,请参见https://dev59.com/dVPTa4cB1Zd3GeqPiFPd - r3m0t
我并不想在一天结束时拒绝读取,我想拒绝写入,但是我找不到仅限写入的权限,有没有什么办法可以实现这个需求? - mmorales
@mmorales,你在结果中找到解决方案了吗? - gaRex
@mmorales 如果我的解决方案在您的环境中可行 - 请接受答案以帮助未来其他人看到解决方案。 - gaRex
2个回答

14

我的配置,现在正在运作:

@gatekeepers = ustimenko
@developers  = ustimenko user1 user2
@deployers   = puppet

@project     = repo1
@project     = cakephp

repo @project
    RW+                 = @gatekeepers  
    R   master develop  = @developers
    -   master develop  = @developers
    RW+                 = @developers
    R                   = @deployers

  1. Gatekeepers 拥有完全的访问权限。
  2. 开发人员可以读取主分支(master)和开发分支(develop),但在这里被拒绝执行其他操作。
  3. 开发者可以进行所有其他操作。
  4. 部署者可以阅读全部内容。

1
我不得不使用 master$ 来使其与 @project = prefix/..* 兼容。 - flob
如果主分支和开发分支是只读的,开发人员如何将代码合并到这两个分支中? - brucenan
@brucenan,devlead可以做这个。或者在更大的公司里可以由部署工程师来完成。 - gaRex
通常情况下,开发者会创建一个新分支来修复 bug 或实现一个功能,而这个分支是本地的。其他人如何将其合并到 develop 和 master 分支呢? - brucenan
2
@brucenan,开发人员创建本地分支,在那里提交了许多提交。然后将分支推送到中央裸仓库,由devlead接管。然后在审核后,开发人员进行变基操作,通过将许多小的提交压缩成几个重要的提交来删除它们,并将分支推回。然后devlead接管并合并到develop分支中。 - gaRex
显示剩余2条评论

0

嗯,我已经查看了文档并在这里尝试过了。

@anything 是用于一组用户或其他组的。你在那里尝试的不正确。 你不能使用"@"运算符作为变量标志。请参考Groups的文档。

repo    dawebsite
    RW+                 =   @vets
    -   branch1         =   @scrubs
    RW+                 =   @scrubs
    R   branch1         =   @scrubs
    R                   =   daemon
    option deny-rules = 1

Gitolite权限


很抱歉,我应该说明一下,我已经尝试使用master、master$、@offlimitbranches甚至refs/heads/master,但都没有成功。 - mmorales

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接