大家好,我是杂烩君。
今天我们来分享Git子模块(Git Submodule)的小知识。
嵌入式开发中,我们经常遇到这样的场景:
主工程(比如 STM32CubeMX 生成的代码)需要集成 FreeRTOS、lwIP 等第三方库或是公司里自己开发的一些基础组件或者公共模块。
这些库可能同时被多个项目使用,版本管理混乱到让人头秃!不可能每修改一个公共模块都到各个项目主工程都修改提交一遍。
这时候 Git Submodule 就像神器一样出现了:
# 主项目中添加FreeRTOS
git submodule add https://github.com/FreeRTOS/FreeRTOS.git components/FreeRTOS
操作后会自动生成.gitmodules
配置文件,子模块默认指向最新版:
# 一次性克隆主项目+所有子模块
git clone --recurse-submodules https://github.com/your/project.git
# 已有项目更新子模块
git submodule update --init --recursive
cd components/FreeRTOS
git checkout V10.6.0 # 切换到指定版本
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,对齐到你主仓记录的主仓。
# 添加lwIP作为FreeRTOS的子模块
git submodule add https://github.com/lwIP/lwIP.git components/FreeRTOS/lwIP
# 递归更新所有子模块
git submodule update --init --recursive
以上就是本次的分享,如果觉得文章有用,麻烦帮忙转发!谢谢
猜你喜欢:
嵌入式编程模型 | MVC模型
手把手教你搭建嵌入式容器化开发环境!一款优雅的嵌入式多功能调试器!
一个非常轻量的嵌入式日志库!
一个非常轻量的嵌入式线程池库!
Github上热门 C 语言项目汇总!
实用 | 10分钟教你通过网页点灯