Git ::将多模块项目拆分为2个模块并保留历史记录

时间:2013-03-18 22:20:38

标签: git git-submodules

目前我们有一个大型项目,包括 A,B,C,D,E 模块。这些模块位于 github 上的相同项目存储库中,但位于不同的文件夹中 - 每个模块位于其自己的文件夹中。如果重要,项目将由Maven管理。

最近,我们决定将项目拆分为两个不同的实例 - P1 P2 ,因此它们将驻留在不同的存储库中。 P1 应该包含模块 A,C,D ,项目 P2 应该包含 B,E

所以现在我们认为我们至少有4个选择:

  • 保持现在的项目。将相应的Git模块添加到 P1 P2 ,这样每个模块都会指向 parent 项目中的相应文件夹。这将保留历史记录(I至少这么认为。)
  • P1 创建存储库,在其中签入内容。然后将模块 B,E 移至文件夹客户端,然后创建将文件夹客户端作为模块导入 P2 repo 。我不知道它是否可能,但它也应该保留历史。
  • 将所有内容检入 P1 P2 ,然后从 P1 中移除 B,E 模块,并将模块<来自 P2 的强> A,C,D 。然后将 P2 作为git模块添加到 P1 。这应该保留历史记录,但实际上太多了 - 所以模块 P2 将包含从 P1 到发散时刻的所有内容。如果可能的话,我们想避免这种情况。
  • 最后,只需从头开始检查一切为新项目。

就个人而言,我更喜欢第一种选择,但不确定这是否可行 - 例如,添加外国项目子文件夹的依赖性。

1 个答案:

答案 0 :(得分:2)

如果您想为每个子模块创建一个新的仓库,那么您应该查看git-subtree。使用split选项仅使用子文件夹的历史记录创建新分支。然后,您可以push将那些新的遥控器作为master分支。

如果您需要使用细节,请打我。