Git 系列文章

相關文章

Git的子模塊

經常使用基礎指令

知道了git的大概工做的大概流程咱們來實踐一下git的基礎操做html

  • git submodule add 遠程倉庫地址 添加子模塊
  • git submodule init 初始化本地配置文件
  • git submodule updata 拉取子模塊數據
  • git clone --recursive 遠程倉庫地址 克隆包含子模塊的倉庫(不用初始化)
  • git rm 子模塊 刪除子模塊
  • git submodule foreach 操做命令 遍歷子模塊執行一樣的命令

來自官網有種狀況咱們常常會遇到:某個工做中的項目須要包含並使用另外一個項目。 也許是第三方庫,或者你獨立開發的,用於多個父項目的庫。 如今問題來了:你想要把它們當作兩個獨立的項目,同時又想在一個項目中使用另外一個。這個時候咱們就須要用到git的子模塊功能了。git

說白了咱們要作的就是在一個git倉庫中在克隆一個git倉庫作爲它的子倉庫github

使用子模塊

1. 添加子模塊

好比咱們已經有一個test倉庫了,咱們在該倉庫中加入一個project倉庫來做爲它的子模塊,咱們來test倉庫中執行git submodule add 遠程倉庫地址web

git submodule add git@github.com:webxiaoma/project.git

執行完後咱們會看到自咱們的test倉庫中有了一個project倉庫,並且在根目錄下多了一個.gitmodules 文件,這個文件中記錄着咱們子倉庫的信息less

[submodule "project"]
    path = project
    url = git@github.com:webxiaoma/project.git

而且咱們如今能夠進入咱們的版本庫.git 目錄來看一下,該目錄中會多出一個modules 文件夾,該文件夾中保存了咱們project 倉庫的一些配置信息和版本,他就是咱們子倉庫的版本庫,在咱們的config配置文件中也多出了一個submodule模塊來記錄咱們子倉庫的遠程地址url

// 上省略
[submodule "project"]
    url = git@github.com:webxiaoma/project.git
    active = true

另外對子模塊project的git操做和日常命令同樣,咱們只要在子模塊中去執行就能夠。code

2. 克隆含有子模塊的倉庫

這裏爲了操做克隆含有子模塊的倉庫,咱們將咱們上面test倉庫提交併推送到遠程,以後咱們刪除本地test倉庫,而後咱們來克隆它,這裏將帶有子模塊的倉庫克隆下來並初始化有兩種方法:htm

第一種方法開發

git clone git@github.com:webxiaoma/test.git

克隆下來後咱們進入子模塊project目錄中,會發現該目錄是空的,咱們須要初始化子模塊。rem

// 初始化本地配置文件
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'
相關文章
相關標籤/搜索