大家好,我是雜燴君。
今天我們來分享Git子模塊(Git Submodule)的小知識。
一、為啥要用 Git子模塊
嵌入式開發(fā)中,我們經(jīng)常遇到這樣的場景:
主工程(比如 STM32CubeMX 生成的代碼)需要集成 FreeRTOS、lwIP 等第三方庫或是公司里自己開發(fā)的一些基礎(chǔ)組件或者公共模塊。
這些庫可能同時被多個項(xiàng)目使用,版本管理混亂到讓人頭禿!不可能每修改一個公共模塊都到各個項(xiàng)目主工程都修改提交一遍。
這時候 Git Submodule 就像神器一樣出現(xiàn)了:
- 子模塊獨(dú)立維護(hù),互不干擾精準(zhǔn)控制每個庫的版本倉庫體積更?。ú挥脧?fù)制粘貼代碼)
二、基礎(chǔ)操作實(shí)戰(zhàn)
1. 添加子模塊
# 主項(xiàng)目中添加FreeRTOS
git submodule add https://github.com/FreeRTOS/FreeRTOS.git components/FreeRTOS
操作后會自動生成.gitmodules
配置文件,子模塊默認(rèn)指向最新版:
2. 克隆帶子模塊的項(xiàng)目
# 一次性克隆主項(xiàng)目+所有子模塊
git?clone?--recurse-submodules https://github.com/your/project.git
# 已有項(xiàng)目更新子模塊
git submodule update --init --recursive
3. 切換子模塊版本
cd?components/FreeRTOS
git checkout V10.6.0 ?# 切換到指定版本
三、開發(fā)流程實(shí)戰(zhàn)
場景 1:修改子模塊代碼
- 在子模塊目錄改代碼
- 提交子模塊修改:
cd?components/FreeRTOS
git add .
git commit -m?"增加test.txt文件"
git push
- 主項(xiàng)目更新子模塊指針:
cd?..
git add components/FreeRTOS
git commit -m?"修改FreeRTOS子模塊:增加test.txt文件"
這時候主倉已經(jīng)記錄了子模塊的commit,已經(jīng)產(chǎn)生了關(guān)聯(lián):
如果拉取遠(yuǎn)端代碼,發(fā)現(xiàn)主倉子倉不對齊,子倉已經(jīng)領(lǐng)先提交,主倉還未合入,為了不影響到自己本地開發(fā),可以:
git submodule update --init --recursive
強(qiáng)制對齊到主倉記錄的子倉的提交。
切主倉分支之后,也要執(zhí)行一遍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
以上就是本次的分享,如果覺得文章有用,麻煩幫忙轉(zhuǎn)發(fā)!謝謝