1 submoude 介紹
(1)項(xiàng)目很大參與開發(fā)人員多的時(shí)候,需要將各個(gè)模塊文件進(jìn)行抽離單獨(dú)管理。
(2)使用git submodule來對項(xiàng)目文件做成模塊抽離,抽離出來的文件可單獨(dú)成為一個(gè)git倉庫。整個(gè)主項(xiàng)目對抽離出來的子項(xiàng)目(子模塊)有依賴關(guān)系,卻又并不關(guān)心子項(xiàng)目(子模塊)的內(nèi)部開發(fā)流程細(xì)節(jié);
(3)代碼如果全員可見,可以做成分支進(jìn)行管理;如果代碼不可見,可以創(chuàng)建為子倉庫(獨(dú)立一個(gè)git 倉庫);子倉庫管理模塊代碼,主倉庫定時(shí)更新
(4)簡單理解:項(xiàng)目工程為一個(gè)倉庫;模塊為一個(gè)倉庫;主倉庫操作git module命令來使用這個(gè)模塊子倉庫;主項(xiàng)目,子模塊可由不同的開發(fā)人員維護(hù)。
2 帶Submodule 模塊的主項(xiàng)目倉庫環(huán)境搭建
(1)克隆一個(gè)主項(xiàng)目倉庫git_test
命令:git clone?git@gitee.com:monkeyqiyu/git_test.git
?
(2)添加模塊子倉庫的路徑到主項(xiàng)目中
執(zhí)行添加子倉庫的命令:
?git submodule add git@gitee.com:monkeyqiyu/git_submodule.git?
?//其中模塊即子倉庫的路徑為:git@gitee.com:monkeyqiyu/git_submodule.git
子模塊倉庫:
注:git submodule 還支持嵌套開發(fā)
(3)提交代碼到遠(yuǎn)程倉庫
git add .
git commit - m ?“添加子倉庫到主倉庫”?
git push origin master
3 帶Submodule 模塊的主項(xiàng)目開發(fā)操作流程
3.1主倉庫開發(fā)人員A克隆代碼進(jìn)行開發(fā)
(1)克隆主倉庫代碼,子倉庫代碼為空
?git clone git@gitee.com:monkeyqiyu/git_test.git? ?
?
(2)執(zhí)行以下命令,獲取子倉庫代碼:
git submodule init ?//初始化子倉庫
git submodule update ??//獲取子倉庫最新代碼
或者直接執(zhí)行:git submodule update --init --recursive
?
3.2子倉庫和主倉庫修改后操作
(1) 非子倉庫代碼修改跟普通git操作一樣提交代碼
(2)主倉庫由開發(fā)人員A開發(fā),子倉庫由開發(fā)人員B進(jìn)行開發(fā):
【1】發(fā)人員B開發(fā)完后提交代碼到遠(yuǎn)程倉庫;
【2】開發(fā)人員A要對submodule 模塊進(jìn)行更新
要執(zhí)行下限命令對submodule進(jìn)行更新,會更新最新的內(nèi)容和commit id:
git submodule update --remote???
再回到主項(xiàng)目倉庫,對主項(xiàng)目進(jìn)行一次提交,推送;把關(guān)聯(lián)子倉庫新的commit id提交推送到遠(yuǎn)程,下次克隆使用才不會出錯!
遠(yuǎn)倉庫主倉庫中的子模塊commit id有更新,點(diǎn)擊會跳到子倉庫
3. 3 開發(fā)人員A同時(shí)管理主倉庫和子倉庫:
【1】子倉庫代碼有修改,要進(jìn)入子倉庫目錄進(jìn)行一次代碼提交,推送遠(yuǎn)程
git add .
git commit -m "修改index = 100"
git push origin HEAD:master
【2】再回到主項(xiàng)目倉庫,對主項(xiàng)目進(jìn)行一次提交,推送
git add .
git commit -m "更新子倉庫index = 100"
git push?origin master
注:
? ? ?如果直接在主倉庫目錄執(zhí)行g(shù)it add .是不起作用的(可以使用git status查看 生效情況,只要子項(xiàng)目有修改,當(dāng)我們進(jìn)入主項(xiàng)目使用 git status查看狀態(tài) 都會有子項(xiàng)目修改的記錄);
? ? ? 必須先提交推送子倉庫代碼,然后到主倉庫路徑提交一次子倉庫的更新;
4 主倉庫中刪除子倉庫
(1)執(zhí)行要刪除的部分
rm -rf 子模塊目錄 //刪除子模塊目錄及源碼
vi .gitmodules ?//刪除項(xiàng)目目錄下.gitmodules文件中子模塊相關(guān)條目
vi .git/config ??//刪除配置項(xiàng)中子模塊相關(guān)條目
rm .git/module/* //刪除模塊下的子模塊目錄,每個(gè)子模塊對應(yīng)一個(gè)目錄,注意只刪除對應(yīng)的子模塊目錄即可
git rm --cached 子模塊名稱
(2)重新提交推送到遠(yuǎn)程倉庫
5、submodule 注意事項(xiàng)
(1)當(dāng)遠(yuǎn)程倉庫的 submodule 進(jìn)行了新的提交,父代碼倉庫的 submodule 不會自動更新?(執(zhí)行g(shù)it pull 或gitsubmodule update也無用)
(2)主工程并不直接跟蹤子模塊的代碼,而僅僅只跟蹤子模塊的 commit id 的改動。在執(zhí)行 git submodule update 更新子模塊代碼時(shí),Git 就是根據(jù)主工程所維護(hù)的 commit id 來更新子模塊到指定狀態(tài)的。文章來源:http://www.zghlxwxcb.cn/news/detail-744615.html
(3)在子模塊中修改并提交了代碼,必須到主工程把子模塊的 commit id 提交一下提交一次;否則其它開發(fā)人員還是停留在老的commit id所致的狀態(tài)文章來源地址http://www.zghlxwxcb.cn/news/detail-744615.html
到了這里,關(guān)于git submodule 使用教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!