Submodule 允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

Git 子模块只是对特定时间快照中另一个存储库的引用。

添加子模块

git submodule {REPO_URL}

对已克隆项目:

git submodule init
git submodule update

Git submodule Init

git submodule init 默认行为是将来自 .gitmodules 文件的映射复制到本地 ./git/config 文件中。

git submodule init 可以后面接收模块名称列表参数。这样使用仅激活特定的子模块。

子模块工作流

一旦子模块在父存储库中正确初始化和更新,它们就可以像独立存储库一样使用。 这意味着子模块有自己的分支和历史。

对子模块进行更改时,必须发布子模块更改,然后更新子模块的父存储库引用。

删除子模块

# 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空
git submodule deinit {MOD_NAME} 
# 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存)
git rm --cached {MOD_NAME} 
# 提交更改到代码库,可观察到'.gitmodules'内容发生变更
git commit -am "Remove a submodule."