submodule 的创建

使用 git submodule add <submodule_url> 命令可以在项目中创建一个子模块。此时项目中就会多出对应的子模块文件。此时主项目仓库会多出 .gitmodulesproject-sub-1 两个文件,然后再在主模块中使用 git commit -m "feat: add submodule xxx" , 将变更提交到仓库中。

[submodule “project-sub-1”] path = project-sub-1 url = github.com/xxx

需要对 path 参数做一下变更,将它写成对应的文件路径。

获取 submodule

对于后继使用者来说,对主模块进行拉取后,子模块中的文件是空的,可以使用两种方式来实现对子模块的拉取。

recursive 参数

git clone github.com/xxx —resursive-submodules

使用上述命令进行执行后,git 会递归地将项目中的所有子模块进行拉取。

在主项目中更新

git submodule init git submodule update

这样操作后会根据主项目的配置信息,拉取更新子项目中的代码

子模块内容的更新

对于子项目的变更,通常有三种情况:

  1. 子项目文件夹内的内容发生了未跟踪的内容变动
  2. 子项目文件夹内的内容发生了版本变化
  3. 当前项目下子模块文件内的内容没有变化,远程有更新

对于第一种情况,需要进入子模块中进行操作,提交变更的内容。提交文成后,需要再进入到主项目中,对子项目中的变更再进行提交(对应上述第二种情况)。

对于第三种情况,需要到子项目文件夹中先对代码进行主动拉取:

cd project-sub-1 git pull origin master

子项目目录会发生变化,然后转到第二种情况进行操作。当主项目的子项目特别多时,逐个进行操作会不太方便,这时可以使用 git submodule foreach "git pull origin master" 来进行遍历执行。

子模块的删除

git submoduel deinit project-sub-1 git rm project-sub-1 git ci -m “feat: delete submodule”

reference: Git 中 submodule 的使用