Gerrit - 如何禁止直接推送到“掌握”但允许其他分支机构

时间:2013-04-26 13:59:50

标签: git gerrit

我想设置下面描述的配置:

  • 注册用户无法将其更改直接推送到master。他必须推动这些变化进行审核:

    git push origin master - 它应该被Gerrit(origin = Gerrit)

    拒绝

    git push origin HEAD:refs/for/master - Gerrit

  • 应该允许
  • 注册用户可以创建新分支。该分支将被视为两个或更多开发人员之间的备份和合作方式,因此不应对其进行审查。

    git push origin xyz_abc - Gerrit

  • 应该允许

我应该如何配置Gerrit来实现此类功能?

5 个答案:

答案 0 :(得分:7)

在任何地方都没有好的指示,所以我想记录下这里的步骤。

<强> 1。导航到项目的“访问权限”页面

项目&gt;列表&gt; your_project&gt;访问

<强> 2。修改权限

单击“编辑”按钮

第3。添加引用refs / heads / *

这是所有直接推送的参考。我们将配置谁可以为此路径做些什么。

点击&#34;添加参考&#34;并输入&#39; refs / heads / *&#39; (没有引号)

<强> 4。拒绝&#34; Push&#34;许可

推送权限是控制谁可以直接推送的权限。仍然允许合并推送和推送到Gerrit(见下面的注释)。

  1. 点击&#34;添加权限&#34;并选择&#34; Push&#34;。
  2. 选择您要拒绝推送的用户组(您可以输入&#34;注册用户&#34;如果您想阻止所有人)
  3. 选择&#34; DENY&#34;从您添加用户组后出现的下拉列表
  4. <强> 5。保存更改

    你已经完成了。完成的配置应该如下所示:

    Finished config

    注意

    如果这不起作用,请确保在refs / for / refs / *上将推送权限设置为ALLOW - 这是允许推送到Gerrit的权限。

答案 1 :(得分:0)

AFAIK您可以为gerrit中的每个repo /项目设置权限。例如谁可以推/谁可以强制推/谁可以批准您的更改等等。检查以下链接是否有用:

https://git.eclipse.org/r/Documentation/access-control.html

答案 2 :(得分:0)

如果有许多分支,您可以使用名称空间(例如dev / *)进行分支,并为这些名称空间设置访问控制。

答案 3 :(得分:0)

在mmelnik的指导下,对此thread的回答。

当引用重叠时,一次只能使用其中之一(更为通用)。

因此,您不应为master设置拒绝权限并允许所有其他分支,而可以为开发分支使用前缀,并使用以下引用允许推送到它们:

^refs/heads/YourPrefix.*

注意:在正则表达式的开头和结尾保留^*

答案 4 :(得分:0)

您需要更改项目的访问设置,然后您需要使用 Exclusive 标志来覆盖 refs/heads/master 的拒绝设置。通过这样的配置,您应该能够实现“允许推送到除 master 分支之外的任何地方。

Access settings for disabling push in master branch but allowing in other branches

来源:https://gerrit-review.googlesource.com/Documentation/access-control.html#_project_access_control_lists