git - 将子模块包含到主存储库中

时间:2014-08-04 12:24:07

标签: git dependencies git-submodules subproject

我用了大约6个月的子项目子项目与一个开发团队的主项目一起开发。

- v-- Repository (developer(s)) --v

- Main project (dev team)
    - Sub project 1 (me)
    - Sub project 2 (me)

由于几个原因,我现在想把我的子项目视为主存储库中的常规文件 其中一个子项目的修改......

  • ...应该可以从主要提交,而不必从子项目提交和推送
  • ......仍然可以从子项目中提交

问题是如何禁用这些子模块
我的意思是禁用而不是删除,因为我需要主存储库中的文件


这是我做的:

  • 已删除.gitsubmodule
  • .git/config
  • 删除了子模块部分
  • rm --cached my_subprojects
  • git add/commit/push

现在,当我尝试合并时,子项目似乎仍被视为子模块,我仍然看到

modified:   Sub project 1 (new commits)
modified:   Sub project 2 (new commits)

2 个答案:

答案 0 :(得分:2)

您仍需要删除gitlink (special entry in the index which marks the folder as a submodule, and records the SHA1 for that submodule)

git rm --cached my_subprojects # no trailing /

唯一的另一个命令是git submodule deinit my_subprojects来处理.gitmodules.git/modulesgit/config

然后你可以add my_subprojects repo as a subtree

答案 1 :(得分:1)

如果您想保留现有文件,请不要忘记从每个子模块的路径中删除.git文件。

子模块在以下位置定义:

  • .gitmodules(不是.gitsubmodules,如上所述)
  • .git/modules(实际存储库)
  • path/to/module/.git(指向提交ID的占位符)
  • git/config

如果你已经清理了所有这些,那么你应该没问题,但确保分支/合并没有咬你 - .gitmodulespath/to/module/.git受版本控制,所以可能会有所不同分支。

您可能会或可能不关心的是您要尝试做的另一个问题 - 您不会保留子模块的任何提交历史记录。您可以通过将每个子模块添加为远程,然后在适当的远程分支中合并来保留提交历史记录。