Git / Gerrit 防止 develop 分支合并到 stable / testing 分支

5
使用Gerrit,很容易将不稳定的代码从develop分支合并到stable分支中:

$ git checkout develop
$ commit
$ git push origin HEAD:refs/for/stable

在Gerrit中,很难清楚地知道所提出的更改来自develop分支,并且要合并到stable分支中。有没有办法防止这种合并发生,无论是在git还是在Gerrit中?

更新: 目前我们使用一个自定义命令来推送到Gerrit,该命令会查找它基于的origin中的最后一个分支,并只允许推送到该分支。


请查看此问题:https://dev59.com/DXRB5IYBdhLWcg3wvpqc - the.malkolm
该问题的解决方案完全防止了推送。我想要推送,但是希望防止开发(或从开发创建的任何分支)被推送到 refs/for/testing 或 refs/for/stable。 - Taco
1
所以你需要为你的远程仓库创建自定义的 pre-receive hook。 - the.malkolm
这在Gerrit中是不可能的 :'( - Taco
2
你的主题摘要中提到了“合并”,但你的示例仅显示了对gerrit的推送,直到它被批准才会合并。如果你想阻止推送,那么你的脚本似乎是正确的。如果你想阻止在gerrit中进行合并,则可以转到项目/访问选项,并确保该分支没有提交者允许。 - e40
3个回答

1

目前软件中没有选项可以防止您犯这种错误。

但是,您可以做以下几件事:

  • 培训人员,使他们在进行审核时始终检查分支名称
  • 设置一个“推送到正确分支”类别(如何在此处),其中包括+1“正确分支”,0“无分数”,-1“不正确的分支”,因此审核者必须正式确认他已经检查了分支名称
  • 设置一个持续集成工具来自动审核和评分上述类别(Jenkins有一个插件可供使用)

请问您能分享一下您用于推送到Gerrit的自定义命令吗?


0

你应该在 Gerrit 中为你的“develop”分支设置特定的访问控制。

设置方式如下:

Reference: refs/for/refs/heads/develop
Push: Allow: <group>

但不要像这样:

Reference: refs/for/refs/heads/*
Push: Allow: <group>

这样您的 <group> 只能将代码推送到 "refs/for/develop" 进行审查,而不能推送到 "refs/for/stable" 或其他分支。

0

一种方法可能是这样的:

分离用户

  • 提交者组 - 所有开发人员,您希望他们只提交到“develop”,而不是“main”
  • 集成者组 - 特权开发人员,可以推送和合并到“main”,如果需要,创建更多分支。

在“git”中,仅允许“Integrator group”的成员(如上所述)进行推送访问。

免责声明:我没有Gerrit / Git管理员角色/配置经验,所以我真的不知道“git”将如何能够获取有关任何用户属于哪个组的信息(在我看来,这仍然可以手动完成)。


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