自动rebase gerrit变化

时间:2015-02-04 12:36:59

标签: git jenkins rebase gerrit

我当前的开发环境包含一个Git / Gerrit设置,该设置运行多个Jenkins作业以验证提交的更改。

Gerrit中的提交类型设置为“仅限快进”。

“问题”:

  1. 更改 被推送到gerrit,触发了Jenkins的验证构建
  2. 更改B 被推送到gerrit,触发了Jenkins的验证构建
  3. 更改 获取“已验证+1”(来自Jenkins)
  4. 更改B 获取“已验证+1”(来自Jenkins)
  5. 更改 已提交
  6. (信息: 更改A / B 是同一分支上的提交,并具有相同的父提交ID)

    此时 更改B 不能再提交,因为其父级未指向分支的HEAD。因此, 更改B 的开发者必须手动修改其更改。 (此rebase创建一个新的补丁集,自动触发Jenkins作业)

    如何摆脱这个手动步骤?

    所以我发现我可以将Gerrit项目的提交类型更改为“必要时重新启动”(我也可以告诉Gerrit自动解决冲突)。这里的问题是,在重新定位和解决潜在的冲突之后,合并更改而不重新运行Jenkins验证作业。由于变基或冲突解决而可能引入的潜在错误无法被发现。

    有没有办法自动更改更改(在示例 更改B 中)并重新运行测试,如果它已过时?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果您使用樱桃挑选功能,似乎可以完成。看到这个其他答案: Gerrit always rebase before submit patchset to avoid a merge commit