工做中,可能會遇到在一個Git倉庫 中添加 其餘 Git 倉庫的場景。好比,在項目中引用第三方庫。或者在模塊化開發中,某些公共的模塊是須要單獨維護的,使用單獨的倉庫比較方便,可是在項目中須要引用,就會出現這樣的場景。這裏使用 Git 的 git submodule
命令爲一個 git 項目
添加 子git項目
。git
能夠使用 git submodule --help
查看全部相關命令。 爲了方便說明,這裏在主項目 MainProject
中加兩個子模塊 liba
和 libb
.github
進入 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
中存放的爲子模塊的信息,使用 cat
或 vim
查看內容爲: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
複製代碼
每每子模塊是單獨開發的,這裏以更新 liba
爲例(爲了測試,這裏先在liba倉庫添加了一個文件):fetch
cd liba/
git fetch
git merge origin/master
複製代碼
操做結果以下圖,注意須要進入子模塊目錄: ui
此外,還能夠在主目錄下 直接用下面的命令更新 libb
子模塊:
git submodule update --remote liba
複製代碼
使用下面的方式,更新 libb
的 dev
分支:
git config -f .gitmodules submodule.liba.branch dev
git submodule update --remote
複製代碼
以下圖:
這裏對
.gitmodules
加了-f
參數,修改提交後對全部用戶有效。
在平常開發中,有添加,固然也會有刪除 子模塊的需求。 這裏主項目包含兩個子模塊:liba
、libb
,以刪除 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下的緩存模塊,最後提交項目。通過上面的刪除後還能夠進行添加子模塊。
若須要克隆含有子模塊的倉庫,直接 進行克隆是沒法拉取之模塊的代碼,可加上 --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/…
更多文章,請點此查看