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

标签 git git-submodules

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

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

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

  • 让项目保持原样。将相应的 Git 模块添加到 P1P2,这样每个模块都将指向 parent 项目中的适当文件夹这将确保保留历史(我至少这么认为)。
  • P1 创建存储库,将内容 checkin 其中。然后将模块 B,E 移动到文件夹 client,然后创建将文件夹 client 作为模块导入 P2 仓库.我完全不知道这是否可能,但它也应该保留历史。
  • 将所有内容 checkin P1P2,然后从P1 中删除模块B、E,并删除模块<来自 P2 的 strong>A、C、D。然后将 P2 作为 git 模块添加到 P1。这应该保留历史,但实际上太多了 - 所以模块 P2 将包含从 P1 到发散时刻的所有内容。如果可能,我们希望避免这种情况。
  • 最后,从头开始,将所有内容都作为新项目进行检查。

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

最佳答案

如果你想为每个子模块创建一个新的 repo,那么你应该查看 git-subtree .使用 split 选项创建仅包含子文件夹历史记录的新分支。然后您可以将它们推送到新的远程作为master分支。

如果您需要详细的用法,请联系我。

关于Git::将多模块项目拆分为 2 个模块并保留历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15488057/

相关文章:

git - 想法 : Update failed unable to access 'https://...git/' : The requested URL returned error: 500

android - 将 git 与使用 repo 检索的 android 源存储库一起使用

Git 子项目?

git - 由于未找到 git 子模块存储库,Travis 构建失败

gitlab - 致命: Needed a single revision(gitlab runner error)

svn - 在使用 git 和 git-svn 桥接器时,如何指示要在 svn 中忽略的文件?

git - 推送到 GitHub 存储库时出现 "Please make sure all files only have LF endings"错误

javascript - 如何从 gulp-esdoc 内部触发错误?

git submodule foreach checkout supermodule 分支

javascript - 从不同目录运行早午餐并使用相对路径