【问题标题】:Git: Authoring a commit that depends on multiple other Gerrit changes?Git:编写依赖于多个其他 Gerrit 更改的提交?
【发布时间】:2016-09-13 19:21:17
【问题描述】:

在我的工作地点,我们使用 Gerrit 服务器进行代码审查。很多时候,不同的人会编写不相关的提交。我遇到了一个问题,我必须编写一个依赖于其他两个不相关提交的提交。

假设 gerrit 服务器上有两个提交:

  • 提交 A:“添加了功能 FlipImage”
  • 提交 B:“添加功能 rotateImage”

这两个是相互独立的。我的工作是实现 Commit C:“添加函数 flipRotateImage”。这要求提交 A 和 B 都存在。

我有两个问题:

  1. 如何以这种方式“拉入”A 和 B,然后是作者 C 我实际上并没有改变A或B?换句话说我不能 挑选 A 或 B,因为它会改变它们。我的目标是成为 无需更新 A 和 B 即可上传 C 以供审核。
  2. 让我们 假设 A 的作者上传了一个新的补丁集。我想更新我的 工作分支,这样我的链中的“A”是最新的“A”,而不是 较旧的补丁集。可以这样做吗?

【问题讨论】:

    标签: git gerrit


    【解决方案1】:
    1. 除非 A 或 B 重新设置为依赖于另一个,否则 C 不能同时依赖于 A 和 B。一种可能性是检出 A 并从 B 合并以创建一个合并提交 D,您可以将其放入C,但是您必须上传这个原本无用的合并提交以供审核,但从图形上看,这是使 A 和 B 都可以从 C 访问而不使 A 可以从 B 访问的唯一方法,反之亦然。
    2. 是的,使用 Gerrit UI 中提供的 URL 将新的 A 提取到您的工作区,然后使用例如git rebase --onto。确切的过程将稍微取决于您选择如何处理第一个问题中的问题,但忽略这一点并假设您已经检查了 C 的主题分支,那么git rebase --onto newA oldA 就可以了。

    【讨论】:

      【解决方案2】:

      Gerrit 中提出了一项更改,以支持 git DAG 之外的这种依赖规范。该更改旨在用于跨项目依赖项,但它也应该支持这种项目内提交依赖项。不过很抱歉,它现在对您没有帮助。

      https://gerrit-review.googlesource.com/#/c/55243

      【讨论】:

      • 两年后,它就在那里,并将帮助未来有同样问题的人。您链接到的更改似乎已死,但文档说它在:docs.openstack.org/infra/manual/…
      • 更正:该功能在 Zuul 中,而不是在 Gerrit 中!所以它只会帮助同时运行这两种产品的人。
      • Gerrit 中的此功能很笨拙,恕我直言,合并为新的“提交整个主题”功能。 gerrit-review.googlesource.com/Documentation/…
      【解决方案3】:

      1) 实际上,您可以从 A 开始并合并 B,然后将您的更改作为对合并提交的修改。如果更改足够独立,您甚至可以合并两个以上。 (章鱼合并)

      2) 这很棘手。 Rebase 本身就足够不确定了 - 没有人谈论 octopus rebase 是有原因的,git-rebase 只尝试对一个父级进行 rebase。但我想你可以创建一个合并,基于它进行 rebase,然后压缩合并提交和你的提交。

      我没有在实践中尝试过任何这些,它可能是不稳定的,但我想确保有人提到它。 技术上这是可行的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多