惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
博客园 - 叶小钗
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
爱范儿
爱范儿
小众软件
小众软件
K
Kaspersky official blog
P
Proofpoint News Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
V
Vulnerabilities – Threatpost
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
C
Cybersecurity and Infrastructure Security Agency CISA
V
V2EX
C
Check Point Blog
S
Schneier on Security
P
Palo Alto Networks Blog
IT之家
IT之家
GbyAI
GbyAI
T
Threat Research - Cisco Blogs
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Apple Machine Learning Research
Apple Machine Learning Research
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
Project Zero
Project Zero
Y
Y Combinator Blog
V
Visual Studio Blog
Simon Willison's Weblog
Simon Willison's Weblog
T
Threatpost
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
S
Securelist
C
CERT Recently Published Vulnerability Notes
A
Arctic Wolf
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理

博客园 - DoubleLi

Git 自动添加 git 子模块(.gitmodules) CMake应用:模块化及库依赖 聊聊git push到远程服务器出现RPC failed问题 Qt Create多核编译配置 C++程序的发布部署方式及缺失依赖库dll的解决方法 VS+QT生成的exe文件所依赖的dll文件和路径 vs如何发布exe并附带动态链接库dll 详解 Visual Studio、MSVC、编译器版本,看完就不再困惑啦! MobaXterm使sftp目录与terminal目录同步 从GPS/北斗模块中获取经纬度 Loguru:Python 日志终极解决方案 VsCode C++ namespace has no member错误 VS Code 提示 namespace “std“ has no member “***“ 解决方法 windows平台中使用vscode远程连接linux进行c++开发配置教程(内容详细适合小白)-2021-3-30 vscode C++ 自动补全失效 从零开始的vscode安装及环境配置教程(C/C++)(Windows系统) VScode 完全卸载并清除原有配置 vscode中 “std“ 没有成员 “round“C/C++(135) vscode 提示 namespace “std“ has no member “mutex“ 的解决方法
如何在gitlab中使用子模块
DoubleLi · 2025-04-11 · via 博客园 - DoubleLi

1. 使用场景

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

2. 使用方法

下面用一个实际的例子来说明吧,我有一个MainModule的项目,下面包含SubModule和SubModule2两个子模块。

2.1 创建子模块

  1. 创建一个空项目,命名为MainModule。

  2. 创建另外一个空项目,命名为SubModule

  1. 在本地用命令行工具将主模块clone下来:git clone git@gitlab.xxx.local:xxx/mainmodule.git 这时目录下只有一个README.md的文件。

  2. 进入到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
  1. 然后通过git add .以及git commit -m "first commit"提交子模块内容,并通过git push -u origin master命令推送到远端git仓库。

  2. 再在gitlab的页面上查看mainmodule的内容,发现多了一个submodule@xxx的目录,点击后可以直接跳转到submodule的project页面。

  1. 但这时候我们在本地发现submodule目录下是空的,可是明明submodule子模块应该是有README文件的,别着急,执行命令:git submodule update --init --recursive,这时候再看我们就会发现README文件出现了。

  1. 同样的办法,可以创建另一个子模块submodule2。

2.2 子模块代码更新

如果我们更新了子模块的代码,主模块如何进行同步呢?

  1. 试着更新一下submodule2的README文件,随便添加一行内容,然后提交。
  2. 这个时候如果在本地的mainmodule下直接pull是没有办法得到最新的submodule2的代码的,只能通过执行命令:git submodule update --init --remote 注意:--init不能省,否则还是有可能子目录是空的
  3. 通过git status查看会发现有内容变化的提示,需要再将变动的内容进行commit并push到远端仓库。

2.3 删除子模块

比如希望删除上面创建的submodule2吧:

  1. 本地mainmodule目录下删除submodule2的子目录:rm -rf submodule2
  2. 编辑.gitmodules文件,将submodule2相关的内容删除
  3. 删除.git/config文件里submodule2相关的内容
  4. 删除.git/modules/submodule2目录:rm -rf .git/modules/submodule2
  5. 将变动内容提交即可。

3. 注意事项

  • mainmodule中默认只能看到各个子模块的master分支,如果希望默认显示其它分支,则在add submodule的时候就指定希望显示的分支。

posted on 2025-04-11 11:17  DoubleLi  阅读(892)  评论()    收藏  举报