<-- home

Git Submodule

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

参考