git 子模块在项目中的使用
在公司的項(xiàng)目中, 經(jīng)常會(huì)遇到一些公共的內(nèi)容, 多個(gè)項(xiàng)目中間通用的, 不可能每次都將整個(gè)代碼復(fù)制一遍, 遇到這種情況有很多不同的解決方案, 一般來(lái)說(shuō), 項(xiàng)目是通過(guò) git 來(lái)管理的, 巧了, git 也同樣支持子模塊.
創(chuàng)建子模塊
git submodule add git@gitee.com:hujingnb/submodule_son.git submodule_son
指定子項(xiàng)目地址, 后面的參數(shù)可以更改子模塊的路徑. 這步操作可給當(dāng)前項(xiàng)目添加一個(gè)子模塊.
克隆新項(xiàng)目
當(dāng)團(tuán)隊(duì)加入新人時(shí), 需要將原項(xiàng)目 down 下來(lái). 操作如下:
- git clone xxxx.git?(克隆項(xiàng)目)
- git submodule init?(子模塊初始化)
- git submodule update?(更新子模塊)
當(dāng)然, 最好一條命令就能搞定:
git clone --recursive xxxx.git
子模塊操作
對(duì)于子模塊的更新,提交等操作, 進(jìn)入對(duì)應(yīng)路徑, 正常操作即可.
問(wèn)題
以上對(duì)于子模塊的使用, 網(wǎng)上有各種教程, 在此不再贅述.
而我在使用中遇到的問(wèn)題是這樣的: 公司的代碼庫(kù)分為測(cè)試環(huán)境與生產(chǎn)環(huán)境兩個(gè)分支:?dev,?master. 由于git對(duì)于子模塊的管理并不是基于分支, 而是基于commit id的. 這對(duì)于引用第三方庫(kù)是可以理解的, 畢竟需要一個(gè)穩(wěn)定的版本嘛. 但是對(duì)于公司這種需要頻繁更新的項(xiàng)目, 就有些混亂了.
舉個(gè)例子, 經(jīng)常會(huì)有多個(gè)任務(wù)并行執(zhí)行的情況, 如果有些任務(wù)后開(kāi)發(fā), 又需要先行合到生產(chǎn)環(huán)境, 可能會(huì)提交了較新的commit id上去. 故而并不像分支管理一樣, 直接拉取分支即可. 這又該如何是好呢?
不同分支
對(duì)于這個(gè)問(wèn)題, 我想了很久. 要想實(shí)現(xiàn)分支的正常管理, 還是應(yīng)該不同環(huán)境對(duì)應(yīng)不同的分支, 但是子模塊只能指定commit id, 不能對(duì)應(yīng)分支. 如此一來(lái), 那就只有一個(gè)辦法, 不同分支指定不同的commit id, 這也是我能想到的最清楚,最符合流程的方式了. 也就是說(shuō), 子模塊也切為dev,?master兩個(gè)分支, 也正常進(jìn)行合并. 而對(duì)于父項(xiàng)目來(lái)說(shuō), 將子項(xiàng)目切換到不同的分支, 每次提交之后, 將子模塊分支拉取到最新, 然后將commit id提上去, 不就解決了么...
流程如下:
然后將以上操作寫(xiě)到腳本中, 每次自動(dòng)化拉取最新代碼即可.
如此一來(lái), 子模塊的管理就和正常流程一致了, 將不同環(huán)境代碼合并到不同分支, 分別拉取對(duì)應(yīng)分支代碼即可.
此方法是我自己想到的, 是否可行還有待驗(yàn)證
子模塊沖突
既然子模塊是根據(jù)commit id進(jìn)行管理的, 那么當(dāng)不同的人提交了不同的commit id上來(lái)的時(shí)候, 就很有可能存在沖突.
先說(shuō)一下我是如何制造沖突的:
此時(shí)沖突如下:
對(duì)于沒(méi)有接觸過(guò)子模塊的我來(lái)說(shuō), 有如下問(wèn)題:
如此該如何解決呢? 很明顯, 這個(gè)沖突是子項(xiàng)目的沖突, 所以要進(jìn)入子項(xiàng)目解決. 主要的思想當(dāng)然還是解決分支之間的沖突.
子模塊沖突解決完畢后, 再回來(lái)查看:
此時(shí)沖突已經(jīng)解決完成, 提交即可.
同理, 當(dāng)你不方便操作master分支的時(shí)候, 將master合并到你自己的分支, 然后解決沖突, 是一樣的.
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的git 子模块在项目中的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于corundumstudio建立we
- 下一篇: 随机数是如何生成的