为什么“-Di”不是 'p4 integrate' 的默认值?

Why is '-Di' not the default for a 'p4 integrate'?

想象一下以下场景:我们有两个 perforce 管理的目录:trunk 和 branch。

  1. File1添加到branch,然后集成到trunk
  2. File1 在分支上重命名为 File2
  3. 一个新的 File1 被添加到分支

在这种情况下,从分支到主干的默认集成将不包含 File1,直到提交集成,然后第二个集成将获取更改。

这个问题可以通过使用 -Di 选项进行集成来避免。我的问题是:为什么这个选项不是默认的?它会导致其他地方出现问题吗?

是的。 -Di 可能有问题的一个很好的例子是在 trunk and/or 分支上编辑 File1 的情况。

假设旧的File1包含"A",trunk/File1是"AB",branch/File2是"AC"。假设新的 File1 是 "D".

branch/File1: D
branch/File2: AC
trunk/File1:  AB

如果您进行默认整合,您首先将 branch/File2 与 trunk/File1 合并,这两者都会合并内容(生成 "ABC"),然后将 trunk/File1 移动到trunk/File2。后续将分支 branch/File1 整合到 trunk 上现在空出的位置,所以 trunk/File1 变成 "D"。这是理想的结果。

如果您使用 -Di 进行集成,则分支 branch/File2 到 trunk/File2,为您提供内容为 "AC" 的 trunk/File2,然后进行无基础合并在 branch/File1 和 trunk/File1 之间,一侧为 "AB",另一侧为 "D"。

所以总而言之,使用默认值(两步积分)你会得到:

trunk/File1: D          (branch)
trunk/File2: AB+AC=ABC  (clean merge)

使用 -Di(一步无基础集成)你得到:

trunk/File1: D+AB=???   (baseless merge)
trunk/File2: AC         (branch)

理论上你可以通过解决冲突来解决这个问题,手动选择历史记录,注意 B 更改应该在另一个文件中,然后手动将其编辑到 File2 中。当集成到其他分支时,您可能最终不得不重复这种性能(现在由于 File2 和 File1 之间的连接不那么明显而变得复杂)。