• 正文
    • 一、为啥要用 Git子模块
    • 二、基础操作实战
    • 三、开发流程实战
  • 相关推荐
申请入驻 产业图谱

嵌入式开发必备技能 | Git子模块

15小时前
309
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

大家好,我是杂烩君。

今天我们来分享Git子模块(Git Submodule)的小知识。

一、为啥要用 Git子模块

嵌入式开发中,我们经常遇到这样的场景:

主工程(比如 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 --recursive

3. 切换子模块版本

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

以上就是本次的分享,如果觉得文章有用,麻烦帮忙转发!谢谢

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

本公众号专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,公众号内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!