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