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