Git submodule 是一个很好的多项目使用共同类库的工具,他允许类库项目做为repository,子项目做为一个单独的 Git 项目存在父项目中,子项目可以有自己的独立的commit,push,pull。而父项目以Submodule的形式包含子项目,父项目可以指定子项目header,父项目中会的提交信息包含Submodule的信息,再clone父项目的时候可以把Submodule初始化。
添加
1 | $ git submodule add https://github.com/chaconinc/DbConnector |
通过 git status
查看状态
1 | $ git status |
此时项目中增加一个 .gitmodules 文件
1 | $ cat .gitmodules |
增加一个模块,该文件就会增加一条记录。
该文件也会受到版本控制,这样项目就知道从哪里获取子模块
克隆含有子模块的项目
接下来我们将会克隆一个含有子模块的项目。 当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:
1 | $ git clone https://github.com/chaconinc/MainProject |
现在 DbConnector 目录是空的,只有执行如下两个命令才可以
1 | $ git submodule init |
或者
1 | $ git submodule update --init --recursive |
不过还有更简单一点的方式。 如果给 git clone
命令传递 --recursive
选项,它就会自动初始化并更新仓库中的每一个子模块。
1 | $ git clone --recursive https://github.com/chaconinc/MainProject |
删除子模块
想要删除子模块需要进行两部操作
1 | $ rm -rf DbConnector/ |
此时想要重新添加该子模块可能会报 ‘DbConnector’ already exists in the index 的错误,此时我们需要加上 --force
参数
1 | $ git submodule add --force https://github.com/chaconinc/DbConnector |
参考文献
最近热读
扫码关注公众号,或搜索公众号“温欣爸比”
及时获取我的最新文章
