繁体   English   中英

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

[英]git - Including submodules into the main repository

大约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)

您仍然需要删除gitlink(索引中的特殊条目,该条目将文件夹标记为子模块,并记录该子模块的SHA1)

git rm --cached my_subprojects # no trailing /

唯一的其他命令是git submodule deinit my_subprojects ,它负责.gitmodules.git/modulesgit/config

然后,您可以my_subprojects库添加为子树

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

子模块在以下位置定义:

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

如果您已经清理完所有内容,那么应该没问题,但是请确保分支/合并不会对您.gitmodulespath/to/module/.git受版本控制,因此在不同分支上可能有所不同。

您尝试执行的操作可能会或可能不会在意另一个问题-您将不会保留子模块的任何提交历史记录。 您可以通过以下方式保存提交历史记录:将每个子模块添加为远程模块,然后合并到适当的远程分支中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM