我维护了一系列分支,.../base/...
,.../base-staging/...
,.../base-production/...
。更改通常在base
中进行,审核,然后集成到base-staging
,最后是base-production
。在集成之前,我通常会执行p4 interchanges
来确认只会进行预期的更改。
通常这有效。但有时p4 integrate
会移除p4 interchanges
未列出的文件和更改。根据我的理解,这不应该发生!我误解了什么?
详细说明:
.../base/...
p4 integrate base/... base-staging/...
p4 integrate base/... base-production/...
.../base/...
和submit
p4 interchanges base/... base-staging/...
p4 integrate base/... base-staging/...
interchanges
命令之前完成,但未在其中提及答案 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