目前公司搭建了一個公共組件庫,想用于多個系統(tǒng),就想到了使用 git 中的子模塊 submodule
在介紹子模塊前先回顧下git的一些基本知識
commit 操作
- 每次commit后發(fā)生了什么?
生成commit對象,包括上游指針彬碱,作者枕屉,提交信息,及指向暫存內(nèi)容快照的指針
commit.jpg
分支
分支其實(shí)是一個指向commit對象的指針乐纸,它會在每次的提交操作中自動向前移動衬廷。
master.jpg
HEAD指針
它是一個指向你正在工作中的本地分支的指針,也可以看成是當(dāng)前工作分支的一個別名,所以切換分支汽绢,其實(shí)就是修改HEAD指針的指向泵督,HEAD會隨著當(dāng)前提前往前移動,所以它與分支的指向是一致的
head.jpg
游離指針
HEAD 頭指針指向了一個具體的提交HASH值庶喜,而不是一個引用(分支)
子模塊
什么是子模塊
通俗的說就是小腊,在項(xiàng)目中使用共享庫代碼,且與當(dāng)前項(xiàng)目相互獨(dú)立,互不影響
基本操作命令
-
git submodule --h
查看幫助 -
git submodule add
添加子模塊 - 生成
.gitmodules
文件
path = rack
url = git://github.com/chneukirchen/rack.git
- 更新方式與普通項(xiàng)目一樣
克隆一個帶子模塊的項(xiàng)目
-
git submodule init
初始化子模塊 -
git submodule update
因?yàn)槟闼鶕碛械闹赶蜃幽K的指針和子模塊目錄的真實(shí)狀態(tài)并不匹配
小貼士
- 子模塊的指針是游離態(tài)的久窟,所以可以理解為子模塊的文件是指針指向的暫存區(qū)的文件
- 在提交子模塊的時候秩冈,我們提交上去的不是具體的文件,而是子模塊當(dāng)前的指針HASH值
- 所以根據(jù)這一特性斥扛,我們可以使用不同的指針來區(qū)分版本入问,舉個栗子,子模塊有兩個分支
1.0
和2.0
稀颁,在A項(xiàng)目中使用的是1.0
芬失,在B項(xiàng)目中使用的是2.0
,那么在A項(xiàng)目中匾灶,就把子模塊的指針指向1.0
的首指針,B項(xiàng)目亦同棱烂。 - 一般情況下不建議在子模塊中修改代碼