【问题标题】:How to join two files in a version control system如何在版本控制系统中加入两个文件
【发布时间】:2011-05-24 19:40:47
【问题描述】:

我正在重构包含许多源文件的 C++ 项目。 当前的重构步骤包括将两个文件(例如,x.cppy.cpp)合并成一个更大的文件(例如,xy.cpp),同时丢弃一些代码,并添加更多代码。

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

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

我想做的事有可能吗?
是否有常规名称(搜索有关“合并”或“加入”的文档不成功)?

【问题讨论】:

  • +1 直到你问,我从来没有想过这样的东西可能有多么有用。

标签: version-control refactoring perforce


【解决方案1】:

我认为它不能在经典的 VCS 中完成。
这些版本控制系统有两种风格(Getting git by Scott Chacon 中的 50 多张幻灯片):

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 试过了;没用。它建议我应该将x.cpp 的第一个(古代)版本作为“基础版本”进行三向合并。
    【解决方案3】:

    简单的部分是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多