Perforce:如何整合多个分支机构?

时间:2010-10-12 09:50:18

标签: branch perforce branching-and-merging

我在Perforce存储库中有以下分支情况:主线“主干”和两个发布分支“1.0”和“1.1”。具有客户特定变化的分支“客户”已经从1.0分支分支出来。现在,客户希望转向1.1版。如何将1.1分支合并到客户分支?客户特定的更改应保持在1.1的“顶部”。

以下是一个受影响文件的图表:

1.1                      -(1)---(2)---(3)
                        /           \     \
                       /             \     \
trunk   100--(101)-(102)--103---104---105---106---107
           \
            \
1.0          ---1-----2--...
                 \
                  \
customer           ---1-----2----*3*

我正在查看的文件的当前版本是客户分支上的第3版。

如果我选择将分支“1.1”与目标“客户”集成,我会发现两者的共同祖先(主线上的修订版100)以及从那里导致1.1分支的尖端的所有修订都被合并(括号中的那些)。

而Perforce仅提供合并1.1分支的修订版1到3,但由于它错过了之前在主线上发生的必要更改而失败了。

如何在不必手动查看每个文件并选择要合并的修订版的情况下说服Perforce执行此操作?也许分支策略不合适?我还应该做什么?

3 个答案:

答案 0 :(得分:2)

当您尝试从1.1分支集成修订版3时,Perforce将只告诉您它正在集成该特定分支上的更改 - 但修订版1已包含主干修订版101和102.合并时,Perforce将识别主干修订版100作为解决冲突的共同祖先。

根据我的经验,您尝试进行的集成应该是Just Work。您是否看到集成源中缺少更改(无法通过不正确的冲突解决方案解释),或者您只是查看p4 interchanges的输出?

答案 1 :(得分:2)

我强烈建议尝试将客户的更改合并到主干中。当客户想要升级到2.0 +他们的自定义更改几个月后,它将继续成为维护的噩梦。

如果您不希望客户更改反映在主项目中,请花时间重新构建代码,以便您可以使用构建标记或构建配置文件公开客户所需的行为。在CI中运行两种构建配置,以确保未来的更改不会破坏客户的构建。

答案 2 :(得分:0)

为了简化集成,我将创建一个特定的分支trunk_to_custer和1.1_to_customer,然后发出:

cd customer-workspace
p4 integ -b trunk_to_customer @change-number-at-which-1.1-was-branched
p4 resolve

也许这是中间提交,然后是

p4 integ -b 1.1_to_customer 
p4 resolve
p4 submit