Gerrit:为同级别的多个 Git 分支配置引用

Gerrit: configure references for multiple Git branches of same level

我们有一个大项目,许多团队在不同的模块上工作,为了保持 'master' 始终正常工作,如果一切正常,我们会在每个 sprint 结束时将多个团队分支合并到主分支。每个团队都有自己的功能分支,完成后会转到团队分支。

现在我尝试将我们的项目移动到 Gerrit 以禁止意外直接推送到 'master',但面临几个问题。我经常使用 Git,但以前从未使用过 Gerrit,所以我对他的 "magic namespaces" 有点困惑。我已经搜索了官方文档,但仍然有很多不足之处。

我想做的是让每个开发者都有权创建新的引用并推送(包括强制)到refs/heads/*(功能和团队分支),但不能推送直接进入 refs/heads/master。所有对 master 的提交都应该通过 Gerrit 审查和我们的 CI 工具构建周期,因此应该被推送到 refs/for/master。

我发现我不能同时允许 'refs/heads/*' 的引用和拒绝 'refs/heads/master' 的引用。由于它们的路径发生冲突,因此一次只有其中一个起作用(更通用的一个)。所以我不能拒绝以这种方式推送到 'master'。

这是我的一部分 project.config:

[access "refs/for/master"]
    push = group Developers
[access "refs/heads/*"]
    push = group Developers
[access "refs/heads/master"]
    push = deny group Developers

有没有人有为类似的分支模型设置 Gerrit 的经验? 如果您有任何想法如何解决这个问题或配置回执,请post在这里。

为Gerrit项目设置引用时可能会有点混乱。 事实上 "refs/heads/*" 允许为所有添加的用户组推送到分支,因此上面的配置将无法实现所描述的目标。

这就是我实际解决问题的方式:

[access "refs/for/master"]
    push = group Developers
[access "^refs/heads/OR-.*"]
    create = group Developers
    push = group Developers
    pushMerge = group Developers
[access "refs/heads/master"]
    push = deny group Developers

因为我发现 "refs/heads/*" 的访问规则覆盖了这个命名空间的任何拒绝规则,所以我对以 "OR-" 前缀开头的功能分支使用了正则表达式,同时拒绝推送到 "master"分支。由于我们有几个团队,他们的分支名为 master - 也很容易为他们添加拒绝访问规则。只需使用“^refs/heads/master-.*”正则表达式并拒绝所有推送。

但这仅在您的分支可以通过正则表达式合并时才有效。