如何解决 Perforce 中涉及我不想传播到其他分支的更改的特定情况?
How to solve a specific situation in Perforce involving changes which I do not want to be propagated to other branches?
所以,情况是这样的。我有 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中的文件?
求解条件:
- 我希望流图上的所有绿色箭头都消失。
- 从现在开始,我不希望这个文件出现在Copy (from A to Main) 操作中。 (因为我不想让这个文件再次出现在 Main 中。它应该在那里被删除。)
- 我不想仅针对此特定文件更改有关流规范或工作区规范的任何内容。
有两种方法可以做到这一点:
方案一(通用解):
永远不要在这两个流之间执行 copy
操作。 merge/copy 工作流程与 "ignoring" 更改的想法不兼容,因为一旦你 copy
你无论之前忽略了什么,都强制两个流相同。
幸运的是,流有一个 mergeany
选项,允许您选择退出 merge/copy 工作流程,所以您可以改为 merge/merge 而不必每次都使用 -F
(强制)标志——这是标准的 Perforce 工作流程在流存在之前。当您 merge
时,之前的 "ignored" 修订将不会被合并,本身是 "ignore" 反向产品的修订也不会被合并(即您忽略的删除不会重新传播为如果您正在进行合并,请添加)。
此处更详细地描述了以这种方式 "ignore" branch/delete 操作的能力(再次注意,这仅适用于 merge
/integrate
,不适用于copy
): https://web.archive.org/web/20141020052100/http://www.perforce.com:80/blog/110620/ignoring-branches-deletes
选项二(仅适用于整个文件):
由于这是您不想传播的整个文件,而不是特定的修订版,您可以 isolate
它在 Development.A
的 Paths
中。这会将其从集成视图中删除,这样对该文件所做的任何更改都不会传播(在任一方向上,无论您是合并还是复制)。从 copy
的角度来看,此文件根本不再是您的流的一部分。
所以,情况是这样的。我有 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中的文件?
求解条件:
- 我希望流图上的所有绿色箭头都消失。
- 从现在开始,我不希望这个文件出现在Copy (from A to Main) 操作中。 (因为我不想让这个文件再次出现在 Main 中。它应该在那里被删除。)
- 我不想仅针对此特定文件更改有关流规范或工作区规范的任何内容。
有两种方法可以做到这一点:
方案一(通用解):
永远不要在这两个流之间执行 copy
操作。 merge/copy 工作流程与 "ignoring" 更改的想法不兼容,因为一旦你 copy
你无论之前忽略了什么,都强制两个流相同。
幸运的是,流有一个 mergeany
选项,允许您选择退出 merge/copy 工作流程,所以您可以改为 merge/merge 而不必每次都使用 -F
(强制)标志——这是标准的 Perforce 工作流程在流存在之前。当您 merge
时,之前的 "ignored" 修订将不会被合并,本身是 "ignore" 反向产品的修订也不会被合并(即您忽略的删除不会重新传播为如果您正在进行合并,请添加)。
此处更详细地描述了以这种方式 "ignore" branch/delete 操作的能力(再次注意,这仅适用于 merge
/integrate
,不适用于copy
): https://web.archive.org/web/20141020052100/http://www.perforce.com:80/blog/110620/ignoring-branches-deletes
选项二(仅适用于整个文件):
由于这是您不想传播的整个文件,而不是特定的修订版,您可以 isolate
它在 Development.A
的 Paths
中。这会将其从集成视图中删除,这样对该文件所做的任何更改都不会传播(在任一方向上,无论您是合并还是复制)。从 copy
的角度来看,此文件根本不再是您的流的一部分。