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