# GIT子模組_subModule ## 摘要 - 在某些情況下,我們可能會訂製一套固定的核心,訂製完之後就不去變更了,可是這個時候我們有其他專案需要調用該核心,最簡單的方法就是直接在該核心目錄下創建我們的專案,這可以運作但顯然不符合設計邏輯,這樣代表說我有10個新專案,我會在這個核心目錄下創建10個專案,這樣關git pr就超級亂了,所以這種情況下我們需要使用gitModule來做管理,將核心當作一個子模組來依賴,而新專案可以開一個獨立的Repo然後去引用子模組即可。 - 而這個子模組也有個名稱,統稱SubRepo因為它其實也是一個Repo我們只是掉他這個遠端倉庫。 - 那麼還會遇到一個問題,當子模組獨自升級時(有點中二,意思就是原Repo的作者更新了),那麼我們引用的子模組並不會自我更新,此時就需要執行下面的 <子模組更新流程> 。 ## 如何克隆帶有子模組的專案 ``` git clone --recurse-submodules -j8 https://github.com/godchadigo/BaReporter.git ``` ## 子模組更新流程 1. 使用指令合併。 2. 子倉庫是否需要更新,如果不用更新則跳過這步。 3. 子倉庫更新,cd到子模組目錄下,獨立提取git pull 4. 這步很重要,當更新完成後要記得cd回到主專案目錄,因為你奧push的不是子模組,而是自己的Repo 5. 撰寫更新 commit git commit -m "update SubMdoule" 6. 指定分支 git branch -M main 7. 推送 git push ## 如何操作 ```git= # 添加子模組 # git submodule add <子模組URL> <合併到當前repo的哪個目錄,如果不打就是直接放在跟目錄> # 例如下面這個就是直接複製到主目錄下 git submodule add https://github.com/godchadigo/QJ.Communication.git ``` ![image](https://hackmd.io/_uploads/H1_03dX61l.png) 成效圖 ## 當顯示子模組於xxxxx版本中斷時解決方案 ``` # 進入子模組目錄 cd 子模組路徑 # 切換到主分支(通常是 main 或 master) git checkout master # 拉取最新更新 git pull origin master # 回到主專案根目錄 cd .. # 提交子模組的更新 git add 子模組路徑 git commit -m "更新子模組到最新版本" ``` ## 當原始資料整批複製到別處的時候時 ``` # 1. 進入新專案目錄 cd 你的專案根目錄 # 2. 初始化子模組 git submodule init # 3. 更新子模組 git submodule update --init --recursive ```