git 子模組在專案中的使用

2021-10-10 03:30:53 字數 2532 閱讀 2207

在公司的專案中, 經常會遇到一些公共的內容, 多個專案中間通用的, 不可能每次都將整個**複製一遍, 遇到這種情況有很多不同的解決方案, 一般來說, 專案是通過 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等待時間過長 一會沒有拉取 就會發現有上百條更新待...