Git submodule 倉庫中包含另外的倉庫(子倉庫)


Git submodule 倉庫中包含另外的倉庫(子倉庫)

添加 submodule

在父倉庫 git 目錄下:

git submodule add ssh://ip/[path]/xxx.git

注意:不要在ip前加username@,例如:git submodule add ssh://username@ip/[path]/xxx.git,這樣的話你就得把密碼告訴別人了,如果不加username,那么會用git config 中的user去登陸

在父倉庫添加 submodule 的時候,會讓你輸入密碼把 submodule 的內容拷貝下來,但是如果clone一個帶有 submodule 的的倉庫,那么 submodule 的文件夾內沒有任何內容,具體操作看“第一次clone一個帶有submodule的倉庫

父倉庫的變化:

1 新增了子倉庫的內容文件夾

2 新增(如果之前沒有).gitmodules

.git/config中增加了section:

[submodule "modulename"]

3 .git/modules中增加了module的文件夾,里面有所有自倉庫的git信息文件夾

第一次 clone 一個帶有 submodule 的倉庫

方式一

git clone ssh://ip/[path]/topRepository.git                 不帶任何參數,假設topRepository.git帶有submodule,那么這些submodule的文件夾里面是空的

cd topRepository                                                      進入父倉庫

git submodule                                                          可以看到submodule信息前有個減號'-'

git submodule init                                           第一次不帶參數克隆需要初始化

git submodule update                                          這樣就會把submodule的內容clone下來

git submodule foreach git checkout master               注意:update 后的 submodule 會被 checkout 到 head 的 commit id 上,並不會自動checkout 到 master 分支,所以這行是在所有的 submodule 中 checkout master

方式二

git clone ssh://ip/[path]/topRepository.git --recursive    這種方式會在克隆父倉庫的同時克隆submodule

cd topRepository                                                          進入父倉庫

git submodule                                                               可以看到submodule信息前沒有減號'-'

git submodule foreach git checkout master                  注意:update 后的 submodule 會被 checkout 到 head 的 commit id 上,並不會自動checkout 到 master 分支,所以這行是在所有的 submodule 中 checkout master

如果 submodule 中還帶有 submodule,那么可以是用 --recursive 參數

父倉庫有新的 submodule 添加,或者 submodule 有新的 commit

別人在父倉庫里加了 submodule,這時候需要更新自己本地的父倉庫的 submodule

在父倉庫目錄下:

git pull

git submodule init

git submodule update

更新某個submodule:

git submodule update -- [path]

一次新 pull 所有的 submodule

在父倉庫目錄下:

git submodule foreach git pull origin master

submodule push

先在 submodule 的目錄下 push  這是單獨更新 submodule 的內容

然后在父倉庫的目錄下push    這是更新父倉庫的 submodule 信息

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM