






















如果你有一个项目是由若干个子模块构成的,比如前后端分离的web项目,两个模块关系很密切,CI/CD的过程都希望是可以一起的,但是代码管理呢又希望是分开的,毕竟是不同的人在维护,而且也不希望两个模块间的开发互相影响。之前我们都是创建两个独立的project来维护的,这样就又体现不出来二者的联系了,这时候gitlab的子模块就可以派上用上了~~
下面用一个实际的例子来说明吧,我有一个MainModule的项目,下面包含SubModule和SubModule2两个子模块。
创建一个空项目,命名为MainModule。
创建另外一个空项目,命名为SubModule

在本地用命令行工具将主模块clone下来:git clone git@gitlab.xxx.local:xxx/mainmodule.git 这时目录下只有一个README.md的文件。
进入到mainmodule目录,使用命令:git submodule add http://gitlab.xxx.local:xxx/submodule.git,这是再看mainmodule目录下会发现多了一个submodule的目录以及.gitmodules的隐藏文件。

其中.gitmodules文件的内容大体如下:
[submodule "submodule"]
path = submodule
url = http://gitlab.xxx.local/xxx/submodule.git
然后通过git add .以及git commit -m "first commit"提交子模块内容,并通过git push -u origin master命令推送到远端git仓库。
再在gitlab的页面上查看mainmodule的内容,发现多了一个submodule@xxx的目录,点击后可以直接跳转到submodule的project页面。

git submodule update --init --recursive,这时候再看我们就会发现README文件出现了。

如果我们更新了子模块的代码,主模块如何进行同步呢?
git submodule update --init --remote 注意:--init不能省,否则还是有可能子目录是空的
比如希望删除上面创建的submodule2吧:
rm -rf submodule2rm -rf .git/modules/submodule2此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。