相關文章
Git的子模組
常用基礎指令
知道了git的大概工作的大概流程我們來實踐一下git的基礎操作
-
git submodule add 遠端倉庫地址
新增子模組 -
git submodule init
初始化本地配置檔案 -
git submodule updata
拉取子模組資料 -
git clone --recursive 遠端倉庫地址
克隆包含子模組的倉庫(不用初始化) -
git rm 子模組
刪除子模組 -
git submodule foreach 操作命令
遍歷子模組執行同樣的命令
來自官網有種情況我們經常會遇到:某個工作中的專案需要包含並使用另一個專案。 也許是第三方庫,或者你獨立開發的,用於多個父專案的庫。 現在問題來了:你想要把它們當做兩個獨立的專案,同時又想在一個專案中使用另一個。這個時候我們就需要用到git
的子模組功能了。
說白了我們要做的就是在一個git
倉庫中在克隆一個git
倉庫做為它的子倉庫
使用子模組
1. 新增子模組
比如我們已經有一個test
倉庫了,我們在該倉庫中加入一個project
倉庫來作為它的子模組,我們來test
倉庫中執行git submodule add 遠端倉庫地址
git submodule add git@github.com:webxiaoma/project.git
執行完後我們會看到自我們的test
倉庫中有了一個project
倉庫,而且在根目錄下多了一個.gitmodules
檔案,這個檔案中記錄著我們子倉庫的資訊
[submodule "project"]
path = project
url = git@github.com:webxiaoma/project.git
並且我們現在可以進入我們的版本庫.git
目錄來看一下,該目錄中會多出一個modules
資料夾,該資料夾中儲存了我們project
倉庫的一些配置資訊和版本,他就是我們子倉庫的版本庫,在我們的config
配置檔案中也多出了一個submodule
模組來記錄我們子倉庫的遠端地址
// 上省略
[submodule "project"]
url = git@github.com:webxiaoma/project.git
active = true
另外對子模組project
的git操作和平常命令一樣,我們只要在子模組中去執行就可以。
2. 克隆含有子模組的倉庫
這裡為了操作克隆含有子模組的倉庫,我們將我們上面test
倉庫提交併推送到遠端,之後我們刪除本地test
倉庫,然後我們來克隆它,這裡將帶有子模組的倉庫克隆下來並初始化有兩種方法:
第一種方法
git clone git@github.com:webxiaoma/test.git
克隆下來後我們進入子模組project
目錄中,會發現該目錄是空的,我們需要初始化子模組。
// 初始化本地配置檔案
git submodule init
// 則從該專案中抓取所有資料並檢出父專案中列出的合適的提交
git submodule updata
第二種方法
這種方法克隆下拉的倉庫它的子倉庫就已經初始化好了
git clone --recursive git@github.com:webxiaoma/test.git
3. 推送子模組
推送子模組我們可以直接在子模組中執行git push
,如果提示你執行 git push origin HEAD:<遠端分支名>
, 你檢視一下你是否處於子模組的master
分支,如果不是切換到master
分支去推送,推送完成後我們再去推送我們的父模組。
4. 更新子模組
我們更新子模組有兩種方法。第一種方法我們在子模組目錄直接使用git pull
;
第二種方法是使用git submodule update --remote 子倉庫名
git submodule update --remote project
5. 刪除子模組
刪除子模組我們可以使用
git rm project
這樣刪除的子模組其實只是把我們子模組的資料夾刪除了,並沒有將子模組的資訊刪徹底,我們還要進入.git/module
目錄中將project
目錄刪除(這個目錄對應的是子模組的的目錄,如果你的模組叫lesson
,那麼就在.git/module
目錄中刪除對應的lesson
目錄)。
6. 批量操作子模組
如果主倉庫中含有很多的子模組,我們在推送主倉庫時需要先推送每一個子模組,這樣操作很麻煩,我們可以使用git submodule foreach 命令
,foreach
可以遍歷所有子模組並執行我們要執行的命令。例如我們推送所有子模組
git submodule foreach `git pull`