Git 子模組(Submodule)

  • Git 子模組應用。
  • 於 Git 中建制另一個 Git 模組應用。

介紹

當專案引用到第三方套件時,大多都是將該套件下載後整包扔進專案裡。當套件有更新時,又要重複一次複製-扔進專案的動作。

GIt 子模組(Submodule)讓我們可以將套件與專案拆開,此後第三方程式就可以直接更新。

Git Submodule 其實就是巢狀的 Git 結構,也就是你有一個 Repository,裡面還有一個子 Repository,兩個 Repository 參考的是不同的 remote 的情況。

創建

Jquery 套件放置專案內。

1
2
# git submodule add <模組 url> <放置專案位置>
$ git submodule add git@github.com:jquery/jquery.git jquery

我們會看到專案內部被添加了以下兩個檔案。

  • .gitmodule: 紀錄所有 submodule 的路徑url
  • jquery(資料夾): 紀錄 submodule 的 commit id,進到此資料夾內會看到子模組內容。

將子模組資訊傳上 GIt。

1
2
3
$ git add .
$ git commit -m "add submodule"
$ git push

下載

我們可以在下載專案後,使用指令進行子模組的建置。

1
2
3
4
5
6
7
# 下載模組
$ git clone https://github.com/hank7891/GitSubmodle.git
$ cd GitSubmodule

# 建置子模組
$ git submodule init
$ git submodule update

也可以利用 --recursive 在專案 clone 時就直接將子模組建置好。

1
$ git clone --recursive https://github.com/hank7891/GitSubmodle.git

設定忽略 Submodule 內部的改動

jquery 內部有改動的時候,外部的 git status 會出現修改提示。

可以在 .gitmodules 加上設定 ignore = dirty。修改完記得要提交呦。

更新/升級

切換至子模組下做 GIT 操作,並回到上一層將子模組檔案 git add,並提交出去即可。

刪除

Git 目前還沒有任何指令可以下指令把 submodule 刪除,故須操作以下步驟:

  1. 刪除 submodule 的資料夾

    1
    $ rm -rf <submodule path>
  2. 刪除 .gitmodules 裡面 submodule 設定

  3. 提交更新。

  4. 刪除 .git/config 裡面的 xsubmodule 設定

  5. 刪除資料夾 .git/modules/<module name>

Author

LinYoYo

Posted on

2022-07-10

Updated on

2022-07-10

Licensed under