Git Submodule
May 12, 2019
What
在终端中输入 git submodule --help 可以看到 git-submodule - Initialize, update or inspect submodules。所以 git submodule 的作用就是初始化、更新和检查子模块。子模块作为单独的 git 仓库存在父仓库(superproject).子项目可以有自己的独立的 commit,push,pull。
Why
- 分离代码到不同仓库
- 将子模块添加到多个仓库
How
add submodule
git submodule [--quiet] add [<options>] [--] <repository> [<path>]
// example
git submodule add https://github.com/Alamofire/Alamofire.git submodule/Alamofire
父项目的git并不会记录Submodule的文件变动,它是按照commit git指定Submodule的git header。
delete submodule git 并不支持直接删除Submodule需要手动删除对应的文件:
cd pod-project
git rm --cached submodule/Alamofire
rm -rf submodule/Alamofire
// 更改 .gitmodules 文件
vim .gitmodules
更改git的配置文件config:
vim .git/config
update submodule 由于是相对独立的 git 仓库,所以单独更新也可以采用遍历的(foreach)方式。
git submodule foreach git pull
// or
cd submodule/Alamofire
git pull
clone project
采用递归的(recursive)clone
git clone [superproject_url] --recursive
或者是先 clone 父仓库,在初始化,更新子仓库
git clone [superproject_url]
cd [superproject]
git submodule init
git submodule update
参考