git submodule 教學

kmsheng
3 min readJul 26, 2018

--

git 允許你在 repo 裡面建立子 repo, 通常會應用在多個 repos 都需要共同讀取、修改或追蹤某一個 repo 時的情境。

新增 submodule 的做法 :

git submodule add {remote} {folder}

如果 folder 名稱沒給的話, 資料夾的名稱預設就會用 {project}.git 的 project 名稱建立。

例如我有一個 UI 元件的 repo my-ui, 底下需要加入一個 submodule 資料夾 schema , remote 為 git@github.com:kmsheng/my-swagger-schema.git

這時 git 會幫你把 submodule 的內容 clone 下來, 這時下 git status會發現除了 schema 資料夾之外, 還多出 .gitmodules 這個檔案, .gitmodules 這個檔案是用來紀錄掛載 submodule 的路徑跟 url。

把這兩個檔案 commit 上去, 進到 commit 畫面你會發現 schema 的部分只有 commit my-swagger-schema.git 的 commit hash

進到 schema 資料夾加一個檔案並 commit, 回到上一層

可以發現 submodule 有新的 commit 出現了

重新 clone my-repo 時記得要下 git submodule initgit submodule update 才可以更新 submodule 的內容, 不然 submodule 資料夾裡面會是空的喔 !

刪除 submodule 的做法 :

刪除的部分比較麻煩一點, 需要 4 個步驟

git submodule deinit {folder}

git rm --cached {folder}

git commit -m "removed submodule"

rm -rf .git/modules/{folder}

References:

https://gist.github.com/myusuf3/7f645819ded92bda6677

--

--