总共有 10 个变更列表 10006, 10009, ... 10089 属于分支 1 中的新功能,我想将该功能合并到分支 2 中。
如下所示,许多更改列表包含具有不同修订版本的相同文件。
变更列表 10006 包含文件:ClosedLoop.cs(#5)、C(#2)、D.cpp(#2)、K(#3)
更改列表 10009 包含文件:D.cpp(#7)、E(#6)、H(#2)、M(#5)、Z(#2)
...
changelist10089 包含文件:ClosedLoop.cs(#8)、U(#7)、I(#9)
我选择所有 10 个变更列表进行合并,因为每个列表中都包含一些独特的文件。 (如10006中的文件C和K,10089中的文件U和I)
问题:
Perforce 使用旧版本 (ClosedLoop.cs rev. 5) 而不是新版本 (ClosedLoop.cs rev. 8) 进行合并。
Perforce 使用 ClosedLoop.cs 修订版 5 和 8 进行合并,而不仅仅是最新版本(修订版 8)
详情:
我按照步骤合并视频中分支之间的文件
(https://www.youtube.com/watch?v=6hCPZPl68ng)。
在合并/集成对话框中,我执行以下步骤:
1. 选择“过滤器”选项卡
2.勾选“精选的chagelists”
3. 从列表中检查多个更改列表。选定的更改列表包含具有不同修订版本的相同文件。 如下所示, changelist 10006 包含修订版 5 中的 ClosedLoop.cs,changelist 10089 包含修订版 8 中的相同文件。
Perforce 使用 ClosedLoop.cs 修订版 5 和 8 进行合并。
通过单独指定每个变更列表,您可以为每个变更列表设置合并,该合并仅包含该变更列表中的特定更改。 为 #5 和 #8 安排了单独的合并,因为每次合并只会带来该特定修订版中所做的更改 - 因此,如果您要跳过 #5 合并而只执行 #8 合并,您将不会得到#5 中所做的更改(即使这些更改存在于内容 #8 中,如果您指定只需要 #8,合并将尝试排除它们,就像排除 #6 和 #7 一样)。
您可能想要做的正是 Perforce 为您设置的操作——合并 #5,然后合并 #8。 每次合并都会将一个变更列表的编辑内容带入目标文件中,完成这两项操作后,您将拥有这两个变更列表,但不会拥有中间的变更列表。
这篇知识库文章介绍了这种类型的“樱桃选择”合并的机制:https://portal.perforce.com/s/article/3385
如果您不想对每个文件进行多次合并,则可以通过指定范围将所有内容作为单个集成进行,例如:
p4 集成分支1/...@10006,10089 分支2/...
但是当然这将包括branch1上该范围内的所有变更列表。 进行单独的樱桃采摘合并(这是您已经设置的)是获得这些特定更改的唯一方法,仅此而已。