知道了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
好比咱們已經有一個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
這裏爲了操做克隆含有子模塊的倉庫,咱們將咱們上面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
推送子模塊咱們能夠直接在子模塊中執行git push
,若是提示你執行 git push origin HEAD:<遠程分支名>
, 你查看一下你是否處於子模塊的master
分支,若是不是切換到master
分支去推送,推送完成後咱們再去推送咱們的父模塊。
咱們更新子模塊有兩種方法。第一種方法咱們在子模塊目錄直接使用git pull
;
第二種方法是使用git submodule update --remote 子倉庫名
git submodule update --remote project
刪除子模塊咱們可使用
git rm project
這樣刪除的子模塊其實只是把咱們子模塊的文件夾刪除了,並無將子模塊的信息刪完全,咱們還要進入.git/module
目錄中將project
目錄刪除(這個目錄對應的是子模塊的的目錄,若是你的模塊叫lesson
,那麼就在.git/module
目錄中刪除對應的lesson
目錄)。
若是主倉庫中含有不少的子模塊,咱們在推送主倉庫時須要先推送每個子模塊,這樣操做很麻煩,咱們可使用git submodule foreach 命令
,foreach
能夠遍歷全部子模塊並執行咱們要執行的命令。例如咱們推送全部子模塊
git submodule foreach 'git pull'