• 正文
    • 一、為啥要用 Git子模塊
    • 二、基礎(chǔ)操作實(shí)戰(zhàn)
    • 三、開發(fā)流程實(shí)戰(zhàn)
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式開發(fā)必備技能 | Git子模塊

03/12 16:26
820
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是雜燴君。

今天我們來分享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ā)!謝謝

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

本公眾號專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時,公眾號內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!