有種情況我們經(jīng)常會遇到:某個工作中的項目需要包含并使用另一個項目葵袭。 也許是第三方庫涵妥,或者你獨立開發(fā)的,用于多個父項目的庫坡锡。 現(xiàn)在問題來了:你想要把它們當(dāng)做兩個獨立的項目蓬网,同時又想在一個項目中使用另一個
1、添加子模塊
git submodule add 【URL】【path】
其中鹉勒,url為子模塊的路徑帆锋,path為該子模塊存儲的目錄路徑
安裝完成后會創(chuàng)建或者修改.gitmodules,新增一個文件路徑
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git2.png" />
.gitmodules內(nèi)容如下:
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git3.png" />
2禽额、初始化更新子模塊
初始化本地配置文件
git submodule init
更新子模塊
git submodule foreach "git pull origin master"
多個子模塊都可以更新
3锯厢、修改子模塊
cd rn-app(子模塊目錄)
modified子模塊
git commit -am "modified commit" 提交修改內(nèi)容
git push origin master 提交代碼到遠(yuǎn)程倉庫
4、克隆子模塊
有兩種方式克隆子模塊:
(1)脯倒、采用遞歸參數(shù) --recursive 克隆整個項目
git clone --recursive git@igit.58corp.com:cst-rn/rnSubscribe.git
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git6.png" />
可以看到只有父項目添加的子模塊实辑,在clone時,都會遞歸的把子模塊全部克隆到項目里面
(2)盔憨、先clone父項目,在初始化submodule
git clone git@igit.58corp.com:cst-rn/rnSubscribe.git
cd rnSubscribe
git submodule init
git submodule update
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git7.png" />
5讯沈、子模塊刪除
git rm --cached 子模塊目錄 刪除子模塊緩存
rm -rf 子模塊目錄 刪除子模塊目錄
vim .gitmodules 刪除對于子模塊相關(guān)條目
vim .git/config 刪除配置項中子模塊相關(guān)條目
常見問題
1郁岩、一些操作導(dǎo)致子模塊無法正常添加
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git4.png" />
使用一下命令安裝:
git submodule add --name Common git@gitlab.abc.com:cs70/console-before.git ./rn-app
或者
git submodule add --force git@igit.58corp.com:cst-rn/rn-app.git
2、提示子模塊已存在 但是本地并未見到
<img src="https://img.58cdn.com.cn/escstatic/fecar/pmuse/reactnative/git5.png" />
刪除子模塊是未刪除干凈
git rm --cached rn-design
rm -rf rn-design
rm .gitmodules
vim .git/config 刪除配置項中子模塊相關(guān)條目