git submodule 子模塊

背景:爲什麼要用子模塊?

在開發項目中可能會遇到這種問題:在你的項目中使用另一個項目,也許這是一個第三方開發的庫,或者是你獨立開發的並在多個父項目中使用的。簡單來說就是A同學開發了一個模塊,被B\C同學共同調用,,可能就形成了這種模塊調用關係。

然後就產生了一個問題:我想將兩個項目單獨處理。但是又需要再其中一箇中使用另一個。

解決方案

git給了一個處理方案--子模塊

  • 子模塊允許將一個git倉庫作爲另一個git倉庫的子目錄,他能讓你將另一個倉庫克隆到自己的項目中區去,並且保持提交的獨立。
  • 子模塊關鍵字:git submodule

如何使用子模塊

假如我有兩個倉庫,module(目標倉庫)和submodule(子模塊倉庫)。

在現有的倉庫中加入子模塊

git submodule add https://gitee.com/Hancoson/submodule.git module

  • 現在在module項目子目錄中就會有一個submodule子模塊。
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   .gitmodules
    new file:   submodule

我們會發現多兩個新的文件,首先是.gitmodules文件。這個文件是一個配置文件,保存了項目URL和已經拉取的本地目錄之間的映射

  • 查看.gitsubmodule文件 cat .gitsubmodule
[submodule "submodule"]
  path = submodule
  url = https://gitee.com/Hancoson/submodule.git

如果有多個子模塊,文件裏會有多個條目。但是這個文件個其他文件一樣也是處於版本管理控制之下的,就像.gitignore文件一樣,這樣該子模塊是和其他們文件一樣可以被推送和拉取。這也是克隆該項目獲知子模塊項目來源的途徑。

  • 提交增加的子模塊到該項目的遠程倉庫中

commit 方式和普通提交的方式相同

  • 克隆一個帶有子模塊的項目

git clone <url>克隆這個項目時,默認會包含該子模塊的所有目錄,但是目錄中不會有任何文件,這是需要運行兩個命令:

  1. git submodule init 用來初始化本地配置文件;
  2. git submodule update用來拉取module目錄中的所有數據,並檢測出你上層項目所列的合適的提交。
$ git submodule init
Submodule 'submodule' (https://gitee.com/Hancoson/submodule.git) registered for path 'submodule'
$ git submodule update
Submodule path 'submodule': checked out '471741e958c2ef0096ad5971c264041a9295ce3b'
  • 修改子模塊

切換到要修改代碼的子模塊,修改代碼,push方式和普通方式相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章