Git 子模塊:git submodule

工做中,可能會遇到在一個Git倉庫 中添加 其餘 Git 倉庫的場景。好比,在項目中引用第三方庫。或者在模塊化開發中,某些公共的模塊是須要單獨維護的,使用單獨的倉庫比較方便,可是在項目中須要引用,就會出現這樣的場景。這裏使用 Git 的 git submodule 命令爲一個 git 項目 添加 子git項目git

能夠使用 git submodule --help 查看全部相關命令。 爲了方便說明,這裏在主項目 MainProject 中加兩個子模塊 libalibb .github

1. 添加子模塊

進入 MainProject 使用 git submodule add 進行添加,操做命令:vim

git clone https://github.com/imtianx/MainProject.git
cd MainProject/
git submodule add https://github.com/imtianx/liba.git
複製代碼

以下圖: 緩存

使用 git submodule add https://github.com/imtianx/libb.git 添加 libb 子模塊。 對於上圖,文件夾 liba 爲新增長的子模塊目錄, .gitmodules 中存放的爲子模塊的信息,使用 catvim 查看內容爲:bash

[submodule "liba"]
	path = liba
	url = https://github.com/imtianx/liba.git
[submodule "libb"]
	path = libb
	url = https://github.com/imtianx/libb.git
複製代碼

.gitmodules文件:保存項目 URL 與已經拉取的本地目錄之間的映射,有多個子模塊則含有多條記錄,會隨着版本控制一塊兒被拉去和推送的。模塊化

此時文件目錄樹以下:工具

.
├── README.md
├── liba
│   ├── README.md
│   ├── a.txt
│   └── a2.txt
├── libb
│   ├── README.md
│   ├── b.txt
│   └── b2.txt
└── test.text

複製代碼

最後,提交添加的子模塊到主目錄測試

$ git commit -m "add liba and libb submodules"
[master 6b15e30] add liba and libb submodules
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 liba
 create mode 160000 libb
複製代碼

2. 更新子模塊

每每子模塊是單獨開發的,這裏以更新 liba 爲例(爲了測試,這裏先在liba倉庫添加了一個文件):fetch

cd liba/
git fetch
git merge origin/master
複製代碼

操做結果以下圖,注意須要進入子模塊目錄ui

此外,還能夠在主目錄下 直接用下面的命令更新 libb子模塊:

git submodule update --remote liba
複製代碼

\color{red}{注意:上面的操做的都 master 分支,沒法操做其餘分支}

使用下面的方式,更新 libbdev 分支:

git config -f .gitmodules submodule.liba.branch dev
git submodule update --remote
複製代碼

以下圖:

這裏對 .gitmodules 加了 -f 參數,修改提交後對全部用戶有效。

3. 刪除子模塊

在平常開發中,有添加,固然也會有刪除 子模塊的需求。 這裏主項目包含兩個子模塊:libalibb,以刪除 liba 爲例說明:

  • 使用 git rm --cached liba 將liba 從版本控制中刪除(本地仍保留有),若不須要可不帶 --cached進行徹底刪除。
  • 使用 vim .gitmodules 可打開vim編輯,刪除對應的內容
[submodule "liba"]
          path = liba
          url = https://github.com/imtianx/liba.git
          branch = dev
複製代碼
  • 使用 vim .git/config 可打開vim編輯,刪除對應的內容
[submodule "liba"]
         url = https://github.com/imtianx/liba.git
         active = true
複製代碼
  • 使用 rm -rf .git/modules/liba, 刪除.git下的緩存模塊,最後提交項目。

通過上面的刪除後還能夠進行添加子模塊。

4. 克隆含子模塊的倉庫

若須要克隆含有子模塊的倉庫,直接 進行克隆是沒法拉取之模塊的代碼,可加上 --recursive 參數,以下:

git clone --recursive https://github.com/imtianx/MainProject.git
複製代碼

或者使用下面的三部操做:

git clone  https://github.com/imtianx/MainProject.git
git submodule init
git submodule update
複製代碼

更多子模塊的操做,請參考官方文檔:Git 工具 - 子模塊

轉載請著名出處:imtianx.cn/2018/03/08/…

更多文章,請點此查看

相關文章
相關標籤/搜索