子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。
它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立
帮助文档
1 | usage: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>] |
创建的配置文件
- .gitmodules
1
2
3[submodule "themes/next"]
path = themes/next
url = git@github.com:VideoTec/hexo-theme-next.git
子模块文件夹 虽然是工作目录中的一个子目录,但 Git 还是会将它视作一个子模块。
当你不在那个目录中时,Git 并不会跟踪它的内容, 而是将它看作该仓库中的一个特殊提交。
资料
例子
增加子模块
1
2git submodule add https://github.com/chaconinc/DbConnector
git submodule add https://github.com/iissnan/hexo-theme-next themes/next删除子模块
way-to-remove-a-git-submodule1
2
3
4
5
6git submodule deinit <asubmodule>
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>克隆仓库后,第一次拉取子模块的,需要初始化
git submodule init
- 列出所有子模块
git submodule status
- 拉取子模块
git submodule update
拉取子模块时的错误
1
2
3 > $ git submodule update .deploy_git
> Fetched in submodule path '.deploy_git', but it did not contain d0146b46d71549946f37804f694af92b9db0a9e7. Direct fetching of that commit failed.
>解决办法,cd,到子模块目录,使用 git status 查看状态,进行处理。