网站首页 > 精选文章 正文
大家好,我是杂烩君。
今天我们来分享Git子模块(Git Submodule)的小知识。
一、为啥要用 Git Submodule?
嵌入式开发中,我们经常遇到这样的场景:
主工程(比如 STM32CubeMX 生成的代码)需要集成 FreeRTOS、lwIP 等第三方库或是公司里自己开发的一些基础组件或者公共模块。
这些库可能同时被多个项目使用,版本管理混乱到让人头秃!不可能每修改一个公共模块都到各个项目主工程都修改提交一遍。
这时候 Git Submodule 就像神器一样出现了:
- 子模块独立维护,互不干扰
 - 精准控制每个库的版本
 - 仓库体积更小(不用复制粘贴代码)
 
二、基础操作实战
1. 添加子模块
# 主项目中添加FreeRTOS
git submodule add https://github.com/FreeRTOS/FreeRTOS.git components/FreeRTOS操作后会自动生成.gitmodules配置文件,子模块默认指向最新版:
2. 克隆带子模块的项目
# 一次性克隆主项目+所有子模块
git clone --recurse-submodules https://github.com/your/project.git
# 已有项目更新子模块
git submodule update --init --recursive3. 切换子模块版本
cd components/FreeRTOS
git checkout V10.6.0  # 切换到指定版本三、开发流程实战
场景 1:修改子模块代码
- 在子模块目录改代码
 
- 提交子模块修改:
 
cd components/FreeRTOS
git add .
git commit -m "增加test.txt文件"
git push- 主项目更新子模块指针:
 
cd ..
git add components/FreeRTOS
git commit -m "修改FreeRTOS子模块:增加test.txt文件"这时候主仓已经记录了子模块的commit,已经产生了关联:
如果拉取远端代码,发现主仓子仓不对齐,子仓已经领先提交,主仓还未合入,为了不影响到自己本地开发,可以:
git submodule update --init --recursive强制对齐到主仓记录的子仓的提交。
切主仓分支之后,也要执行一遍git submodule update --init --recursive,对齐到你主仓记录的主仓。
场景 2:子模块嵌套依赖
# 添加lwIP作为FreeRTOS的子模块
git submodule add https://github.com/lwIP/lwIP.git components/FreeRTOS/lwIP
# 递归更新所有子模块
git submodule update --init --recursive以上就是本次的分享,如果觉得文章有用,麻烦帮忙转发!
猜你喜欢
- 2025-05-14 变基 git rebase
 - 2025-05-14 Windows误删急救!3步找回+防删秘籍,免费工具一键恢复
 - 2025-05-14 「工具」代码管理工具Git
 - 2025-05-14 Git下载与安装图文教程
 - 2025-05-14 Linux下gitblit的安装和配置
 - 2025-05-14 git的撤销、删除和版本回退
 - 2025-05-14 Git恢复至之前版本
 - 2025-05-14 手把手教你如何上传代码到gitee服务器
 - 2025-05-14 【超详细】Git 所有常用命令 + 提交规范全指南(建议收藏!)
 - 2025-05-14 Git使用技巧
 
- 最近发表
 
- 标签列表
 - 
- 向日葵无法连接服务器 (32)
 - git.exe (33)
 - vscode更新 (34)
 - dev c (33)
 - git ignore命令 (32)
 - gitlab提交代码步骤 (37)
 - java update (36)
 - vue debug (34)
 - vue blur (32)
 - vscode导入vue项目 (33)
 - vue chart (32)
 - vue cms (32)
 - 大雅数据库 (34)
 - 技术迭代 (37)
 - 同一局域网 (33)
 - github拒绝连接 (33)
 - vscode php插件 (32)
 - vue注释快捷键 (32)
 - linux ssr (33)
 - 微端服务器 (35)
 - 导航猫 (32)
 - 获取当前时间年月日 (33)
 - stp软件 (33)
 - http下载文件 (33)
 - linux bt下载 (33)
 
 
