如何在Perforce中合并两个文件,以便保留两个文件的历史记录?

如何在Perforce中合并两个文件,以便保留两个文件的历史记录?,perforce,Perforce,我有一个perforce存储库,其中包括: depot |-- wug.h |-- wug1.cpp |-- wug2.cpp |-- wug3.cpp h包含一个类声明,该类的定义分布在其他三个文件中。我希望将所有文件合并到一个文件中,而不会丢失它们的性能历史记录。我已经查阅了大多数perforce命令的文档,不知道该如何做。有人能提出建议吗?如果您想创建一个名为“wug.cpp”的新文件,其中包含所有其他文件,请在元数据中保留此文件的记录,并在一个变更列表中完成所有操作,您可以执行

我有一个perforce存储库,其中包括:

depot
 |-- wug.h
 |-- wug1.cpp
 |-- wug2.cpp
 |-- wug3.cpp

h包含一个类声明,该类的定义分布在其他三个文件中。我希望将所有文件合并到一个文件中,而不会丢失它们的性能历史记录。我已经查阅了大多数perforce命令的文档,不知道该如何做。有人能提出建议吗?

如果您想创建一个名为“wug.cpp”的新文件,其中包含所有其他文件,请在元数据中保留此文件的记录,并在一个变更列表中完成所有操作,您可以执行以下操作:

p4 merge wug1.cpp wug.cpp
p4 resolve (choose 'at', to branch the file)
p4 merge wug2.cpp wug.cpp
p4 resolve (choose 'm' to invoke perforce's merge tool, then 'ae' to accept)
p4 merge wug3.cpp wug.cpp
p4 resolve (choose 'm' to invoke perforce's merge tool, then 'ae' to accept)
p4 delete wug1.cpp wug2.cpp wug3.cpp
p4 submit
在“p4解析”过程中,您需要进行无基础的合并,以便将所有文件编辑在一起,因为没有一个公共的基础用作实际合并它们的参考点。对于没有共同祖先的文件,Perforce的合并工具在默认情况下将以这种方式运行,并且应该(或多或少)提供一个合并输出,该输出由一个文件的内容组成,然后是另一个文件的内容,这或多或少是合适的

最终解析后,您可以进行编辑(首先使用
p4 edit wug.cpp
打开文件进行编辑),例如将include指令移动到文件顶部,删除重复或无关的代码或注释,以及其他此类清理更改


这具有保存文件内容历史记录的理想效果,因此命令
p4 annotate-I wug.cpp
正确显示影响每一行的最新更改。

我正在尝试第一种方法,但p4 integrate抱怨缺少-I标志,这在任何地方都没有记录。第一个集成可以工作,但后续的集成失败,错误为“//depot/wug.cpp-无法从//depot/wug2.cpp#1、#10进行集成,无-i标志”这意味着您正在使用旧版本的服务器(或将其配置为使用旧版本的integrate)。尝试将“-3”标志用于“p4 integ”,看看这是否允许进行无基础的集成——如果不允许,则必须使用“-i”,它不会安排真正无基础的合并,因此在“p4解析”过程中您必须更加小心。您将我推到了正确的方向,但我没有完全按照发布的答案使用您的答案,但我仍然认为你值得接受,所以我将编辑它以反映我所做的,然后接受它。感谢您的进一步反馈。是的,这很有效。“p4 merge”本质上是“p4 integ-3-Rbd”的语法糖。