Version control 如何在版本控制系统中连接两个文件 我正在重构包含许多源文件的C++项目。 当前的重构步骤包括将两个文件(例如,x.cpp和y.cpp)合并到一个更大的文件(例如,xy.cpp)中,其中一些代码被抛出,另外一些代码被添加到其中

Version control 如何在版本控制系统中连接两个文件 我正在重构包含许多源文件的C++项目。 当前的重构步骤包括将两个文件(例如,x.cpp和y.cpp)合并到一个更大的文件(例如,xy.cpp)中,其中一些代码被抛出,另外一些代码被添加到其中,version-control,refactoring,perforce,Version Control,Refactoring,Perforce,我想告诉我的版本控制系统(在我的例子中是Perforce),生成的文件基于之前的两个文件,因此将来,当我查看xy.cpp的修订历史时,我还会看到对x.cpp和y.cpp所做的所有更改 Perforce支持重命名文件,因此如果y.cpp不存在,我将确切知道该怎么做。Perforce还支持合并,因此如果我有两个不同版本的xy.cpp,它可以从中创建一个版本。由此,我发现连接两个不同的文件是可能的(不确定);然而,我搜索了一些关于Perforce和其他源代码管理系统的文档,没有发现任何有用的东西 我想

我想告诉我的版本控制系统(在我的例子中是Perforce),生成的文件基于之前的两个文件,因此将来,当我查看
xy.cpp
的修订历史时,我还会看到对
x.cpp
y.cpp
所做的所有更改

Perforce支持重命名文件,因此如果
y.cpp
不存在,我将确切知道该怎么做。Perforce还支持合并,因此如果我有两个不同版本的
xy.cpp
,它可以从中创建一个版本。由此,我发现连接两个不同的文件是可能的(不确定);然而,我搜索了一些关于Perforce和其他源代码管理系统的文档,没有发现任何有用的东西

我想做的一切可能吗?

它是否有一个传统的名称(搜索“合并”或“加入”文档失败)?

我认为在经典的VCS中无法做到这一点。
这些版本控制系统有两种风格(共50张幻灯片):

  • 基于增量的历史记录:获取一个文件,并记录其增量。在这种情况下,以文件为单位,不能将其历史记录与其他文件关联

  • 基于DAG的历史记录:获取一个内容并记录其补丁。在这种情况下,文件本身可能会有所不同(可以随意重命名/移动),它可能是其他两个内容的结果(因此它与您想要的内容非常接近)。。。但仍在一个文件的历史记录中(内容来自其DAG的不同分支)


您可以尝试与无基础合并进行集成(-i在命令行上)。如果我正确理解了文档(而且我自己从未使用过),这将强制集成两个文件。然后,您需要以您选择的方式解决集成问题,从而得到与您所设想的文件相近的结果


完成此操作后,我假设Perforce历史记录将在其集成历史记录中显示来自无关文件的集成,允许您在需要时追溯到该文件。

简单的部分是:

p4 edit x.cpp y.cpp
p4 move x.cpp xy.cpp
p4 move y.cpp xy.cpp

然后,棘手的部分变成解决y.cpp的移动并进行重构。但是这会告诉Perforce这些文件是组合的。

+1直到你问起,我才意识到这样的东西有多有用;没用。它建议我将
x.cpp
的第一个(古老)版本作为“基本版本”进行三方合并。