自动变基 gerrit 更改

Automatically rebase gerrit Changes

我当前的开发环境包含一个 Git/Gerrit 设置,其中 运行 有几个 Jenkins 作业来验证提交的更改。

Gerrit 中的提交类型设置为 "Fast-Forward only"。

"problem":

  1. 更改 A 被推送到 gerrit,触发基于 Jenkins 的验证构建
  2. 更改 B 被推送到 gerrit,触发了基于 Jenkins 的验证构建
  3. 更改 A 得到 "Verified +1"(来自 Jenkins)
  4. 更改 B 得到 "Verified +1"(来自 Jenkins)
  5. 变更A已提交

(信息:更改 A/B 是同一分支上的提交并且具有相同的父提交 ID)

此时Change B不能再提交了,因为它的parent没有指向分支的HEAD。因此,Change B 的开发人员必须手动对其更改进行 rebase。 (这个 rebase 创建了一个新的补丁集,它会自动触发 Jenkins 作业)

我怎样才能摆脱这个手动步骤?

于是我发现我可以将Gerrit项目的提交类型改为"Rebase if Necessary"(我也可以告诉Gerrit自动解决冲突)。这里的问题是,在 rebase 和解决潜在的冲突之后,更改被合并而没有重新 运行ning Jenkins 验证作业。由于rebase或解决冲突而引入的潜在错误无法检测到。

有没有办法自动变基更改(示例更改B)并重新运行测试,什么时候过时?

这不可能开箱即用,但您可以编写一个服务来侦听事件(例如通过 stream-events SSH command)并在提交更改后重新设置针对特定分支的打开更改到同一个分支。为此编写一个插件也应该相当容易,但显然这也会产生更紧密的耦合。

好像用cherry pick功能就可以了。请参阅其他答案: Gerrit always rebase before submit patchset to avoid a merge commit