問題描述
- 存在兩個(gè)由github管理的倉庫,但是現(xiàn)在需要一個(gè)總文件夾user-demo作為這兩個(gè)倉庫的父文件夾
- 執(zhí)行將兩個(gè)由git管理的倉庫直接移入了user-demo中,然后進(jìn)行g(shù)it init 并且push到遠(yuǎn)端倉庫。
- 然后重新從主文件夾的倉庫把項(xiàng)目clone下來發(fā)現(xiàn),兩個(gè)子文件沒有內(nèi)容
ps:目錄結(jié)構(gòu)如下圖
解決思路
- Q1:根據(jù)當(dāng)前需求,可否使用git submodule?
- A1:查詢git submodule的使用條件
submodule允許你將一個(gè) Git 倉庫作為另一個(gè) Git 倉庫的子目錄。 它能讓你將另一個(gè)倉庫克隆到自己的項(xiàng)目中,同時(shí)還保持提交的獨(dú)立。
剛好符合所需條件
- Q2:如何做到讓兩個(gè)repo作為submodule?
- A2:直接使用
git submodule add +倉庫地址
,那么現(xiàn)在在主倉庫下生成的這兩個(gè)倉庫就是submodule。***此時(shí)加入的兩個(gè)submodule是直接從remote拉下來的,因此使用git submodule add +倉庫地址
之前先把本地的提交交到remote。此時(shí)你的父倉庫中拿到的就是直接從remote clone回來的子庫了。主子庫結(jié)構(gòu)建立成功
- Q3:構(gòu)建成功后,發(fā)現(xiàn)再次從主庫中clone的項(xiàng)目會出現(xiàn)子文件雖然存在,但是沒有內(nèi)容?
- A3:根據(jù)submodule介紹,此時(shí)clone下來要進(jìn)行
git submodule init
追蹤submodule倉庫,然后使用git submodule update
將每個(gè)submodule的commit指向離主庫commit最近的那一次。
----->所以對于jenkins把代碼clone下來之后,必須在jenkinsfile的build stage中添加
stage('build'){
steps{
checkout scm
git submodule init
git submodule update
}
} //代碼內(nèi)容下一篇講解
- Q4:那么對于代碼更新有要求嘛?
- A4:依舊按照子庫每次都要push,子庫push完主庫再push即可。