Git merge submodule into parent tree cleanly and preserving commit history
我有一个存储库,其中包含两个子模块,我想将其转换为单个项目。许多答案都涉及脚本,有些似乎过于复杂。
1 2 3 4 5 6 7 8 9 10 | [submodule"site"] path = wp-content/themes/site url = https://[email protected]/ajf-/site.git fetchRecurseSubmodules = true ignore = all [submodule"wpsite"] path = wp-content/themes/wpsite url = https://[email protected]/ajf-/wpsite.git fetchRecurseSubmodules = true ignore = all |
是否有官方支持/记录的方式将这些子模块合并到父存储库中?
最好的方法是进行子树合并。
首先,从父项目中删除子模块和相关配置;编辑.gitmodules文件以删除受影响的子模块,或者如果要合并所有子模块,则完全删除该文件。同时删除子模块目录。
接下来,将子模块存储库作为适当的远程设备添加到您的超级项目中:
1 2 | git remote add site https://[email protected]/ajf-/site.git git remote add wpsite https://[email protected]/ajf-/wpsite.git |
然后,取出遥控器:
1 | git fetch --all |
号
现在,从每个子项目中检查要移植到主项目的分支:
1 2 | git checkout -b site-branch site/some_branch git checkout -b wpsite-branch wpsite/some_other_branch |
现在可以将这些分支作为子树与主项目合并:
1 2 | git read-tree --prefix=site/ -u site-branch git read-tree --prefix=wpsite/ -u wpsite-branch |
。
你完成了。用
由于您希望转换为单个项目,所以您不会独立地更新子项目,所以我不会描述它是如何工作的。
你可以在pro git的子树合并一章中阅读到这一点。