Git Submodule 允许一个git仓库,作为另一个git仓库的子目录,并且保持父项目和子项目相互独立。
如果项目中包含Submodules,在pull时不会同时获取submodules的源码,需要执行本地初始化的命令,再同步远端submodule源码。
git submodule init //初始化本地.gitmodules文件
git submodule update ///同步远端submodule源码
//或者使用组合指令
git submodule update --init --recursive
如果希望clone 的时候包含所有submodules,可以使用下面的命令
git clone --recurse-submodules <url>
子仓库创建
新建一个父仓库main,一个子仓库sub。
将父仓库克隆到本地。
git clone ssh
进入父仓库,并添加子仓库。
git submodule add ssh
添加成功后,在父仓库根目录增加了.gitmodule文件,并且在父仓库的git 配置文件中加入了submodule段。
[submodule "sub"]
path = lib
url = ssh://git@xxxx.git
子仓库更新
添加子仓库之后,主仓库的对应目录下,并不是sub仓库的文件,而是对应的commit id
在子仓库,切换到master分支,并git pull最新代码之后,回到主仓库目录,会显示子仓库修改,需要在主仓库提交修改,即修改指定的commit id。
如果在本地修改子仓库,需要先在子仓库提交,然后再到主仓库提交代码。
子仓库删除
删除.gitsubmodule里相关部分
删除.git/config 文件里相关字段
删除子仓库目录。