添加

1
$ git submodule add https://github.com/chaconinc/DbConnector

通过 git status 查看状态

1
2
3
4
5
6
7
8
9
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: .gitmodules
new file: DbConnector

此时项目中增加一个 .gitmodules 文件

1
2
3
4
$ cat .gitmodules
[submodule "DbConnector"]
path = DbConnector
url = https://github.com/chaconinc/DbConnector

增加一个模块,该文件就会增加一条记录。
该文件也会受到版本控制,这样项目就知道从哪里获取子模块

克隆含有子模块的项目

接下来我们将会克隆一个含有子模块的项目。 当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:

1
$ git clone https://github.com/chaconinc/MainProject

现在 DbConnector 目录是空的,只有执行如下两个命令才可以

1
2
$ git submodule init
$ git submodule update

或者

1
$ git submodule update --init --recursive

不过还有更简单一点的方式。 如果给 git clone 命令传递 --recursive 选项,它就会自动初始化并更新仓库中的每一个子模块。

1
$ git clone --recursive https://github.com/chaconinc/MainProject

删除子模块

想要删除子模块需要进行两部操作

1
2
$ rm -rf DbConnector/
$ git rm DbConnector/

此时想要重新添加该子模块可能会报 ‘DbConnector’ already exists in the index 的错误,此时我们需要加上 --force 参数

1
$ git submodule add --force https://github.com/chaconinc/DbConnector

参考文献

03-16 16:07