在公司的專案中, 經常會遇到一些公共的內容, 多個專案中間通用的, 不可能每次都將整個**複製一遍, 遇到這種情況有很多不同的解決方案, 一般來說, 專案是通過 git 來管理的, 巧了, git 也同樣支援子模組.
git submodule add [email protected]:hujingnb/submodule_son.git submodule_son
指定子專案位址, 後面的引數可以更改子模組的路徑. 這步操作可給當前專案新增乙個子模組.
當團隊加入新人時, 需要將原專案 down 下來. 操作如下:
當然, 最好一條命令就能搞定:
git clone --recursive ***x.git
對於子模組的更新,提交等操作, 進入對應路徑, 正常操作即可.
以上對於子模組的使用, 網上有各種教程, 在此不再贅述.
而我在使用中遇到的問題是這樣的: 公司的**庫分為測試環境與生產環境兩個分支:dev
,master
. 由於git
對於子模組的管理並不是基於分支, 而是基於commit id
的. 這對於引用第三方庫是可以理解的, 畢竟需要乙個穩定的版本嘛. 但是對於公司這種需要頻繁更新的專案, 就有些混亂了.
舉個例子, 經常會有多個任務並行執行的情況, 如果有些任務後開發, 又需要先行合到生產環境, 可能會提交了較新的commit id
上去. 故而並不像分支管理一樣, 直接拉取分支即可. 這又該如何是好呢?
對於這個問題, 我想了很久. 要想實現分支的正常管理, 還是應該不同環境對應不同的分支, 但是子模組只能指定commit id
, 不能對應分支. 如此一來, 那就只有乙個辦法, 不同分支指定不同的commit id
, 這也是我能想到的最清楚,最符合流程的方式了. 也就是說, 子模組也切為dev
,master
兩個分支, 也正常進行合併. 而對於父專案來說, 將子專案切換到不同的分支, 每次提交之後, 將子模組分支拉取到最新, 然後將commit id
提上去, 不就解決了麼...
流程如下:
切換子模組分支:git submodule foreach git checkout master
將子模組分支拉取到最新:git submodule foreach git pull
提交commit id
:git add .; git commit -m ""; git push;
然後將以上操作寫到指令碼中, 每次自動化拉取最新**即可.
如此一來, 子模組的管理就和正常流程一致了, 將不同環境**合併到不同分支, 分別拉取對應分支**即可.
此方法是我自己想到的, 是否可行還有待驗證
既然子模組是根據commit id
進行管理的, 那麼當不同的人提交了不同的commit id
上來的時候, 就很有可能存在衝突.
先說一下我是如何製造衝突的:
父專案與子模組分別拉取分支:master_tmp
父專案與子模組切回master
分支
子模組修改檔案並提交, 父專案更新commit id
此時父子都回到master_tmp
分支, 修改同一行內容,並提交commit id
將父專案master_tmp
合併到master
分支
此時衝突如下:
對於沒有接觸過子模組的我來說, 有如下問題:
這兩個commit id
我怎麼知道哪個是最新的? 總不能乙個乙個去找吧
submodule_son
連個檔案都沒有, 我該怎麼解決這個衝突???
如此該如何解決呢? 很明顯, 這個衝突是子專案的衝突, 所以要進入子專案解決. 主要的思想當然還是解決分支之間的衝突.
將子模組分支切到master
:git checkout master
將子模組產生衝突的提交新建乙個分支:git branch merge_tmp a8f5f8c
將子專案合併到master
:git merge merge_tmp
解決子專案的衝突
再次回來檢視, 衝突解決, 提交即可
子模組衝突解決完畢後, 再回來檢視:
此時衝突已經解決完成, 提交即可.
同理, 當你不方便操作master
分支的時候, 將master
合併到你自己的分支, 然後解決衝突, 是一樣的.
git子模組使用
如下專案有多個標紅的子模組 1 首先進入每個子模組目錄,init初始化子模組倉庫,然後提交遠端。2 在每個子目錄都初始化好倉庫後,進入lv qggz主目錄,只初始化該倉庫,然後依次新增子模組的倉庫位址,命令如下 git submodule add 最後將主倉庫提交到遠端 3 轉殖主倉庫 將主倉庫cl...
Git子模組使用
在工作中我們經常遇到乙個情況,在乙個專案中需要包含並使用到另乙個專案,比如開發部落格時使用到的主題專案,或者是公司業務中需要在多個專案中使用的庫。那該如何獨立管理這兩個專案,並在乙個專案中使用另乙個專案呢?git 通過子模組來解決這個問題。子模組允許你將乙個 git 倉庫作為另乙個 git 倉庫的子...
如何在大型專案中使用Git子模組開發
公司需要開發乙個內部系統,要求每個部門都要接入。老闆欽點,工期又壓得短,於是浩浩湯湯的上百人就調過來了。再簡單的事情,只要人多起來就會變得複雜,開發的世界也是如此。乙個幾百人的大專案,使用git協作的時候,想一想我們的痛點 專案過大,每個人clone等待時間過長 一會沒有拉取 就會發現有上百條更新待...