用一下 Git Submodule 啦

開始使用

上次更換了一下 Blog 的 hugo theme,但是後來發現直接用 git clone 下載下來的 theme 沒有更新到 GitHub 上面 (╯•̀ὤ•́)╯

歐給歐給,我們改用一下 Submodule 處理一下

加入 Submodule

這次目標要把從 Gitee 上 Clone 回來的 Repo XiaoXiaoSN/hugo-theme-pure 作為 Theme, 放到 XiaoXiaoSN/XiaoXiaoBlogthemes/pure 資料夾下!

git rm themes/pure

git submodule add [email protected]:XiaoXiaoSN/hugo-theme-pure.git themes/pure

完成後我們會多一個 .gitmodules 檔案,裡面的內容也很直觀

[submodule "themes/pure"]
	path = themes/pure
	url = [email protected]:XiaoXiaoSN/hugo-theme-pure.git

把更新推出去~ git push origin master

第一次使用 Submodule 的話

為了測試我再另外下載一份

git clone --depth 1 [email protected]:XiaoXiaoSN/XiaoXiaoBlog.git testXiaoXiaoBlog

進去後我們可以用 git submodule 查看目前的狀態

$ git submodule
 c97723a02ac3abace65a6433eab381f0acbe2719 themes/pure
$ git submodule init
子模組 'themes/pure'([email protected]:XiaoXiaoSN/hugo-theme-pure.git)已對路徑 'themes/pure' 註冊

$ git submodule update
正複製到 '/Users/arios/Project/XiaoXiaoBlog/themes/pure'...
子模組路徑 'themes/pure':簽出 'c97723a02ac3abace65a6433eab381f0acbe2719'

或是也可以合在一起做

git submodule update --init

更新 Submodule

要測試更新 Submodule 所以我們先到被註冊的 Submodule 製造一個 Commit 模擬依賴的模組被更新的狀態~

# cd hugo-theme-pure
git commit -m 'chore: just a empty commit' --allow-empty

再來我們回到剛剛的專案內,並且 cd 到 Submodule 的資料夾

# cd themes/pure
$ git pull origin master
來自 github.com:XiaoXiaoSN/hugo-theme-pure
 * branch            master     -> FETCH_HEAD
更新 c97723a..afa94b2
Fast-forward

回到這邊發現 Submodule 已經更新了

# cd ../..
$ git submodule
+afa94b26c59df0c4ce226f173d88fdc8ba9a0246 themes/pure (heads/master)

再重新推出去就好囉~~

git add --all
git commit -m 'feat: upgrade `themes/pure`'
git push origin master

看那個 Commit Hash 是不是不一樣了呀 >u<

Ref

https://blog.wu-boy.com/2011/09/introduction-to-git-submodule/