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

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

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

大家好,我是雜燴君。

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

相關(guān)推薦

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

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