【问题标题】:Automatically rebase gerrit Changes自动变基 gerrit 更改
【发布时间】:2015-04-03 23:42:38
【问题描述】:

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

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

“问题”:

  1. 更改 A 被推送到 gerrit,触发 Jenkins 上的验证构建
  2. 变更 B 被推送到 gerrit,触发 Jenkins 上的验证构建
  3. 更改 A 获得“已验证 +1”(来自 Jenkins)
  4. 更改 B 获得“已验证 +1”(来自 Jenkins)
  5. 更改 A 已提交

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

此时 Change B 无法再提交,因为它的 parent 不指向分支的 HEAD。因此 Change B 的开发人员必须手动重新调整他的更改。 (这个 rebase 会创建一个新的补丁集,它会自动触发 Jenkins 作业)

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

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

有没有办法自动重新设置更改(在示例 更改 B 中)并在测试过期时重新运行测试?

【问题讨论】:

  • 你为什么要检查 自动解决冲突 没有它每个路径冲突都应该手动重新设置基础,这将创建新的补丁集 - 这会生成所需的 jenkins 作业
  • 好点,我想我会禁用自动解析,但手动步骤仍然是工作流程的一部分......
  • 这就是重点——冲突解决也应该由某人来审查,而不仅仅是代码修改。所以只是不想跳过这一步——也许测试通过了,但用眼睛检查也很好——想想

标签: git jenkins rebase gerrit


【解决方案1】:

如果您使用樱桃采摘功能,似乎可以做到。请参阅其他答案: Gerrit always rebase before submit patchset to avoid a merge commit

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 嗯……这实际上不是我想听到的。我认为这个问题应该是一个很常见的问题,我不必编写自定义触发器。
    猜你喜欢
    • 1970-01-01
    • 2016-07-20
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多