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

时间:2016-04-28 18:06:26

标签: git reference continuous-integration branch gerrit

我们有一个很大的项目,许多团队在不同的模块上工作,并且让'master'始终工作,如果一切正常,我们会在每个sprint的最后使用几个团队分支合并到主分支。每个团队都有自己的功能分支,在完成后会进入团队分支。

现在我尝试将我们的项目转移到Gerrit以禁止意外直接推入'master',但面临几个问题。我经常使用Git,但之前从未使用过Gerrit,所以我对他的“魔术命名空间”感到困惑。我搜索过官方文档,但仍然有很多黑点。

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

我发现我不能同时允许'refs / heads / *'的引用和拒绝'refs / heads / 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的经验? 如果您有任何想法如何解决此问题或配置收据,请在此处发布。

1 个答案:

答案 0 :(得分:0)

为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 / *”的访问规则会覆盖此命名空间的任何拒绝规则,因此我使用regexp作为以“OR-”前缀开头的功能分支,同时拒绝推送到“master” “分支。由于我们有几个团队将其分支命名为master-it,因此很容易为他们添加拒绝访问规则。只需使用“^ refs / heads / master - 。*”regexp并拒绝所有推送。

但这只适用于你的分支机构可以通过regexp联合起来。