協同開發利器——Git Submodule

Git

對於咱們開發人員來講,Git的操做真的是再熟悉不過了,可是,咱們真的利用好了Git了嗎?或者,Git還給我提供了哪些更好功能,更豐富的功能幫助咱們更好的管理代碼,更好的完成項目的構建?git

今天,我就來介紹一個對於團隊十分有幫助的Git的功能——Git Submodulegithub

Git Submodule

Submodule,直譯過來就是子模塊的意思,顧名思義就是控制子模塊的意思。bash

其實在蔣鑫的《Git權威指南》當中,有比較詳細的介紹:項目的版本庫在某些狀況蝦鬚要引用其餘版本庫中的文件,例如公司積累了一套經常使用的函數庫,被多個項目調用,顯然這個函數庫的代碼不能直接放到某個項目的代碼中,而是要獨立爲一個代碼庫,那麼其餘項目要調用公共函數庫該如何處理呢?分別把公共函數庫的文件拷貝到各自的項目中會形成冗餘,丟棄了公共函數庫的維護歷史,這顯然不是好的方法。微信

簡單來講每一個公司,隨着業務的發展或者針對許多項目咱們開發和抽取出一套甚至公用的代碼庫,能夠被多個項目效用,而這個代碼庫不是放在一個項目當中,並且咱們單獨做爲一個代碼庫來使用,同時按期維護這套公共的代碼庫。函數

可是對於其餘的業務代碼來講,他們該如何調用公用的代碼庫呢?難道是要一遍一遍的拷貝嗎?這樣不單單是操做麻煩,並且還丟棄了公共代碼庫的維護歷史,甚至後期維護公共代碼庫的時候維護起來也十分的不便。其實Git早就幫咱們解決了這一個問題,就是經過git submodule來解決!ui

Git submodule用例

首先咱們須要兩個版本庫spa



從名稱,咱們就作了區分,一個是公共的版本庫.net

https://github.com/yang0range/SubModuleDemoLib.git
複製代碼

另外一個是引用公共版本庫的主版本庫code

https://github.com/yang0range/SubModuleDemoMain.git
複製代碼

有了這兩個版本庫,咱們就該介紹如何把兩個版本庫關聯起來了cdn

Git submodule的操做了

這裏咱們先介紹Git命令的使用,接下來,我會介紹TortoiseGit的使用。

添加、提交過程

1.首先Clone主項目

2.接下來Clone Lib項目

能夠看到,咱們這兩個項目都Clone成功了


3.接下來爲主項目添加Submodule

用的命令是

git submodule add <repository> <path> //添加子模塊
複製代碼

執行命令

git submodule add https://github.com/yang0range/SubModuleDemoLib.git SubModuleDemoLib

複製代碼

4.查看狀態

接下來,咱們執行命令

cat .gitmodules
複製代碼

能夠看到submodule添加成功了


同時咱們能夠看到目錄下多了一個.gitmodules的文件


5.提交倉庫

執行git cmmit命令
添加成功以後,再執行

git push指令

關於這兩個咱們最經常使用的指令,就很少介紹了。

以後咱們查看git log就能夠看到咱們的提交記錄了


以上就是完整的添加過程。

Clone流程

對於一個新成員來講,若是clone新代碼也是尤其重要。
git爲咱們提供了兩種克隆帶有子模塊版本庫的方法

方法一

首先clone父項目,再初始化submodule,最後更新submodule。初始化只須要作一次,以後每次update就能夠了。

git clone <main>
cd <main>
git submodule init
git submodule update
複製代碼

這種方法,較爲繁瑣Git又爲咱們提供了另一個方法

git clone main --recursive
複製代碼

這裏採用的是遞歸參數--recursive

修改子模塊

對於子模塊和主模塊來講,兩個庫兩個版本都是相對獨立的,也就說對主模塊來講,提交修改子模塊不會對主模塊形成任何影響。
修改和更新的時候也都是咱們經常使用的指令

git add
git commit 
git datus
git push
...
複製代碼

更新子模塊

對於子模塊的更新,Clone有兩種方法,天然更新也有兩種方法

方法一

pull主模塊,而後更新submodule

cd <main>
git pull
git submodule update
複製代碼
方法二

進入子模塊,而後切換到對應的分支,而後對子模塊獨立的pull

cd <submodule>
git checkout master
cd..
git submodule foreach git pull
複製代碼

刪除子模塊

對於子模塊來講,咱們也會遇到移除,刪除的操做

git rm <submodule> 
git status
git commit -m "remove submodule"
git push origin master
複製代碼

TortoiseGit的Git submodule的使用

TortoiseGit的好處天然沒必要多說了。那麼TortoiseGit如何操做帶有submodule的項目呢?

添加過程

TortoiseGit已經爲咱們考慮了添加子模塊的功能。



Clone過程

首先,咱們Clone出主模塊


Clone以後,咱們發現,只是把子模塊的目錄Clone下來了,並無內容!


彆着急,經過Submodule Update就能夠了



是否是很簡單?

提交、更新過程

以前我也說過,對於主模塊和子模塊來講,兩個是相對獨立了,因此在執行命令的時候,單獨對主模塊,和子模塊分別操做就能夠了。

這些就是TortoiseGit的基本操做,隨便網上一搜就能找到了。

參考

blog.csdn.net/zahuopuboss…
blog.csdn.net/wkyseo/arti…
blog.csdn.net/xuanwolanxu…

最後

相信,經過這篇文章,你們對於Git Submodule的使用有了一個全面的瞭解。

若是你們有任何疑問和問題歡迎關注個人公衆號,或者給我留言!

動動小手指點贊,收藏,關注一鍵三連走一波吧!

歡迎關注公共號

關注公衆號會有更多收穫!


我的微信

咱們一塊兒討論,進步,提升!

相關文章
相關標籤/搜索