为什么“p4集成”操作的文件多于“p4交换”列表?

时间:2014-03-04 20:33:26

标签: perforce-integrate

我维护了一系列分支,.../base/....../base-staging/....../base-production/...。更改通常在base中进行,审核,然后集成到base-staging,最后是base-production。在集成之前,我通常会执行p4 interchanges来确认只会进行预期的更改。

通常这有效。但有时p4 integrate会移除p4 interchanges未列出的文件和更改。根据我的理解,这不应该发生!我误解了什么?

详细说明:

  1. 古代历史:
    1. 创建.../base/...
    2. p4 integrate base/... base-staging/...
    3. p4 integrate base/... base-production/...
  2. .../base/...submit
  3. 中进行更改
  4. p4 interchanges base/... base-staging/...
    1. 审核并批准
  5. p4 integrate base/... base-staging/...
    1. 哇!什么是这些其他列出的文件???
    2. 评论:真正的变化,在我的interchanges命令之前完成,但未在其中提及

1 个答案:

答案 0 :(得分:0)

我将假设我们正在谈论一个相对较新的服务器版本 - 在旧版本上“交换”确实与“集成”列表完全匹配,但在较新的版本中,它们有点分歧以解决两个命令的略有不同的常见用例。

“集成”的一个功能是记录历史记录,确保未来的集成以可预测的方式运行。在某些边缘情况下,这意味着打开文件进行集成,即使实际更改不需要传播到目标,因此可以记录文件是最新的。一个非常简单的例子:在A中进行更改,从A到B进行忽略,从B到C进行合并,现在将A合并到C.您的期望通常是整合是“可传递的”,这样如果A-> B报告什么都没有要做,而B-> C报告无事可做,那么A-> C将报告无所事事;但是,如果B-> C合并跳过该改变,因为它是“忽略”,那么A-> C合并没有记录B-> C合并甚至曾经尝试过,并且它将传播改变,违反了及物性的期望。

但是,“交换”并不记录任何历史记录,通常需要将其范围限制为仅报告目标中不存在的源更改。因此,它可以通过运行“集成”来产生比您可能获得的更小的更改集。从“交换”中​​排除但由“集成”包含的更改通常是不严格要求合并的更改,但如果包含它们,则可能更容易合并“必需”更改。

在“integration”上使用“-Rs”标志将使其模仿“交换”行为并选择绝对最小的源修订集。在这篇旧博客文章中简要介绍了它的发布时间:

http://www.perforce.com/blog/101206/p4-integ-3-exciting-things-afoot