【问题标题】:Unable to integrate fully from main branch to feature branch, after backing out a previous messed-up integration退出以前的混乱集成后,无法从主分支完全集成到功能分支
【发布时间】:2013-04-30 22:28:54
【问题描述】:

我正在使用 Perforce P4V 客户端(版本 2013.1/611291,日期为 2013 年 3 月 20 日)。

我尝试从主分支合并/集成到我的功能分支。自从我这样做以来已经有很长时间了,因此大量文件被添加到更改列表中。然后我解决了无法自动合并的冲突文件。然后我提交了更改列表。之后,我发现一些文件仍然处于混乱的冲突状态。究竟为什么对我来说是个谜,但我认为完全撤消合并/集成并重新开始会更容易。

要撤消合并/集成,我使用了“退出”选项。所有受影响的文件都被添加到“退出”更改列表中,我提交了它。我的功能分支现在又回到了最初的位置,但显然现在所有受影响的文件的修订号都增加了两次,受影响文件的历史记录显示了集成,然后是随后的“退出”。

问题是,如果我再次尝试合并/集成选项,这一次 Perforce 想要放入集成更改列表的文件数量现在只是它最初尝试集成的文件的一小部分。换句话说,它并没有添加很多我知道在主分支开发方面肯定会更进一步的文件。

我似乎能够解决这个问题的唯一方法是使用高级选项Force integration on all revisions, disregarding revision history (-f)。设置此选项后,它将添加分支中的合并 all 文件。

我怀疑问题与文件现在在其历史记录中标记了集成这一事实有关,因此 Perforce 使用该点作为基础。混乱的集成被“退出”这一事实对此没有任何影响。

我也尝试过回滚,但同样的问题仍然存在。

我该如何解决这个问题?

编辑 我后来意识到有以下类似的问题: How can I undo an Integration in Perforce, and still be able to redo it?

【问题讨论】:

    标签: perforce


    【解决方案1】:
    • 您尝试从主分支集成到功能分支的文件在首次集成签入后具有集成历史记录。
    • 当您撤消更改时,功能分支的文件会恢复到集成之前的状态,但会为之前更改列表中的每个文件创建新版本的文件。
    • 因此,下一次集成尝试引入自上次以来集成路径的差异。

    正如您已经提到的,摆脱这种情况的唯一方法是使用-i 运行强制集成。您仍然可以像上次一样使用p4 resolve -as ...p4 resolve -am ... 解决更改,然后手动解决剩余的冲突以执行合并。除了历史记录会显示在之前的合并提交中更改的文件的 2 个额外版本以及用于将其退出的提交。

    • 如果您可以在其他位置创建功能分支并丢弃当前位置的功能分支,您可以在执行有问题的集成之前将新功能分支的起点设置为提交/更改列表.
    • 从您的主分支集成到新功能分支中,这次您的历史记录应该更清晰,并且您在原始功能分支中所做的所有文件更改(包括历史记录)也应该有。

    与其他版本控制系统(例如git)不同,不幸的是,无法在 perforce 中重写历史记录以使其忘记集成历史记录并重新开始。

    这是我公司的原因之一,所有架构师和 SCM 都非常挑剔并重申他们的工作流程建议,即在使用 perforce 执行集成时严格遵循分支之间的集成路径。

    【讨论】:

    • 非常感谢您的回答 - 非常感谢。现在是时候让我真正去打麻袋了(我可怜的脑袋已经受够了!)所以我明天会回到这个问题上,并正确地执行你的建议。乍一看,您似乎确实在确认我最初的怀疑,即“来自太空的核武器”选项可能是这里唯一的解决方案。我在工作中使用 Perforce,但出于个人目的,我大量使用 git,这在您所说的这种情况下似乎更宽容。
    • 严格来说,有 种方法可以在 Perforce 中重写历史并让它忘记集成历史并重新开始。但它们非常先进和微妙,只有在绝望的情况下才应该执行它们,并且只能在 Perforce 技术支持的帮助下进行。否则,请遵循 Tuxdude 的出色建议。
    • @BryanPendleton - 我相信您在谈论 p4 obliterate,如 here 所述。出于与您指出的相同的原因,我没有提到它:) 首先,它需要 perforce 中的升级权限(超级用户),接下来 obliterate 是一个危险的命令,用于从 perforce 数据库中删除文件版本. @Trevor,正如 Bryan 指出的那样,如果您想使用 p4 obliterate,请在继续之前获得 SCM 管理员的帮助。
    • @Tuxdude 再次感谢。只是为了提供更新,我发现当我尝试 -i 选项时,随后的自动合并 (-am) 会导致 100 多个无法自动合并的文件,因此需要手动合并。原因似乎是修订版 #1 始终被用作公共基础(由于 -i 这很有意义),这意味着如果源和目标都包含自 #1 以来执行的相同更改,则将其标记为冲突,通常情况下不会。因此,除非我在这里错过了一个技巧,否则我认为这要么是大量手工工作的问题,要么是选择干净的分支选项。
    • p4 obliterate 并不是为了做这种事情而创建的。它实际上是应一个大型开源项目的要求创建的,因此他们可以完全删除那些原来存在许可/所有权问题的贡献。 obliterate 是一个非常粗糙的工具,可能不应该被视为任何“正常”Perforce 工作流程的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2017-04-15
    • 2021-01-12
    相关资源
    最近更新 更多