如何解决 Perforce 中涉及我不想传播到其他分支的更改的特定情况?

Posted

技术标签:

【中文标题】如何解决 Perforce 中涉及我不想传播到其他分支的更改的特定情况?【英文标题】:How to solve a specific situation in Perforce involving changes which I do not want to be propagated to other branches? 【发布时间】:2020-04-04 22:43:00 【问题描述】:

所以,情况就是这样。我有 2 个流,“Development.Main”和“Development.A”(Development.Main 的子级)。我将只关注一个文件通过我执行的“版本控制”步骤所采用的“路径”。

    文件从 Main 开始。 我将其合并到 A 中,没有任何更改。 我在 Main 中删除它。 当我将 Main 中的更改合并到 A 时,我选择“保留目标”,以便文件在 A 中保持未删除,因为 我希望在 Main 中删除文件,而不是在 A。 但是 Perforce 流图告诉我,我有文件要从 A 复制到 Main(请参阅绿色箭头)。当我进行复制操作(从 A 到 Main)时,它想将文件复制回 Main,从而重新生成它。但我希望它保持被删除。 请注意,当我尝试强制从 A 到 Main 的合并(而不是副本)时,Perforce 认为没有要合并的内容并决定以错误响应。见下面的图片#3

1 - 流程图

2 - 修订图

3 - 试图强制从 A 合并到 Main

我该如何解决这种情况,以便我可以删除Main中的文件而不是A中的文件?

解的条件:

    我希望流图上的所有绿色箭头都消失。 从现在开始,我不希望这个文件出现在复制(从 A 到 Main)操作中。 (因为我不希望这个文件再次出现在 Main 中。它应该在那里被删除。) 我不想仅针对此特定文件更改有关流规范或工作区规范的任何内容。

【问题讨论】:

【参考方案1】:

有两种方法可以做到这一点:

选项一(通用解决方案):

永远不要在这两个流之间进行copy 操作。 merge/copy 工作流程与“忽略”更改的想法不兼容,因为只要您copy,您就会强制这两个流相同,无论什么之前被忽略了。

幸运的是,流有一个mergeany 选项,可让您选择退出合并/复制工作流程,因此您可以改为合并/合并,而不必每次都使用-F(强制)标志——这是流存在之前的标准 Perforce 工作流程。当您merge 时,不会合并以前“忽略”的修订,也不会合并本身是反向“忽略”产物的修订(即,如果您是,您忽略的删除不会作为添加重新传播进行合并)。

这里更详细地描述了以这种方式“忽略”分支/删除操作的能力(再次注意,这仅适用于merge/integrate,不适用于copy):https://web.archive.org/web/20141020052100/http://www.perforce.com:80/blog/110620/ignoring-branches-deletes

选项二(仅适用于整个文件):

由于这是您不想传播的整个文件,而不是特定修订,您可以在Development.APathsisolate 它。这会将其从集成视图中删除,这样对该文件所做的任何更改都不会传播(无论您是在合并还是复制,都不会传播)。从copy 的角度来看,此文件不再是您的流的一部分。

【讨论】:

感谢您的快速回答,但是... 1. 当我尝试强制从 A 到 Main 的合并(而不是副本)时,更改列表中没有显示任何文件(Perforce 认为有没有什么可以合并的)。 2. 我不想只为这 1 个文件更改流规范或工作区规范。 (实际上还有很多其他文件在同一条船上。)我编辑了我的问题以包含此信息。 为什么(1)有问题?你不想合并这个文件(这会导致它被重新添加到主文件),所以当你去合并时没有打开任何东西意味着它工作正常。 我犯了一个错误。我知道我过去曾尝试过强制合并,但没有成功——但我没有正确记得出了什么问题。当我尝试这样做时会发生什么,实际上我什至没有得到更改列表。 Perforce 不会让我走那么远。我收到上面的错误消息(我刚刚添加到我的问题中)。 再一次,这似乎是正确的行为。鉴于文件已被集成并且您不想再次集成,您预计会发生什么? (是否有其他、未集成的文件被错误地跳过,或者您不想集成的文件是唯一未集成的文件,而这正是您想要的?老实说,我很困惑这里有什么问题。) 在这种情况下,您需要选项 (2)。没有解决方案可以同时满足您的两个限制条件,因为“我希望您将这个东西制作成另一个东西的精确副本”的概念与“我希望这两个东西不同”的概念不兼容。 :) 让“复制”为您提供不同文件集的唯一方法是,如果其中一些文件完全从操作中排除,并且需要在流定义中明确排除它们。

以上是关于如何解决 Perforce 中涉及我不想传播到其他分支的更改的特定情况?的主要内容,如果未能解决你的问题,请参考以下文章

Perforce:如何重命名目录名称

如何将更改从主分支中的待处理更改列表迁移到 perforce 中的另一个分支

如何获取待处理的 Perforce 更改列表中所有文件的差异?

有没有办法在 Perforce 中进行代码检查?

Perforce:如何将稍后的提交应用于同步到早期版本的工作区?

如何管道密码到perforce p4登录命令进行自动登录?