子模組(Submodule)

開始使用 Git 子模組(Submodule)管理文件版本

加入子模組

1.建立子模組 repository

例如在 github 建立一個 KJModule 的子模組,建立完後一定要做一次 commit,這樣才可以順利的將子模組加入進去到其他專案

git@github.com:kejyun/KJModule.git

2.加入子模組

git submodule add <repository> [<path>]
git submodule add git@github.com:kejyun/KJModule.git ./app/KJModule

指定需要加入的子模組 Repository 以及子模組需要放到專案的哪個路徑中

抓取含有子模組的專案

1.取得資源庫

git clone git@github.com:kejyun/KJ.git

2.初始化子模組並更新

git submodule init
git submodule update

變更子模組 repository 路徑

在 git 子目錄有 .gitmodules 檔案,如果模組路徑要刪除或變更,需要修改此檔案

[submodule "app/KeJyunModule"]
	path = app/KeJyunModule
	url = git@github.com:kejyun/KeJyunModule.git
[submodule "app/KeJyunGroupModule"]
	path = app/KeJyunGroupModule
	url = git@github.com:kejyun/KeJyunGroupModule.git

在隱藏目錄 .git 中,找到你要變更的模組目錄的設定檔案

.git/modules/<模組路徑>/config

vim ~/KeJyunProject/.git/modules/app/KeJyunModule/config

在 config 設定檔變更 [remote"origin"]url 去變更子模組的路徑

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
	worktree = ../../../../app/KeJyunModule
[remote "origin"]
	url = git@github.com:kejyun/KeJyunModule.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

clone 直接下載所有子模組

使用 clone 指令時可以加入 --recursive 參數,直接抓取該 repository 的所有子資料夾

git clone --recursive git@github.com:kejyun/KJ.git

更新 git 資料夾下的所有子模組

git 專案可以使用各種子模組去管理專案,但若子模組也有載入子模組的話,會需要依序地進去各個子模組將模組的子子模組抓下來,這樣會造成很大的困擾,所以可以使用下列指令一次就將所有的子模組皆載入下來

git submodule update --init --recursive

子模組使用注意事項

因為子模組也可能會有自己的子模組,如果互相引用的話在抓取專案可能會造成 遞迴 的狀況,導致專案 無窮迴圈永遠抓不完

所以在規劃子模組至專案是,記得要規範好不同模組之間的依賴關係,小心 不要造成遞迴子模組載入 的狀況

- 複雜的 Repositoy
	- 獨立的元件 Repository Submodule
		- 獨立的 Helper Method Repositoy Submodule

更新 git 資料夾下的所有子模組

開始使用 Git 子模組(Submodule)管理文件版本,更新 git 資料夾下的所有子模組

刪除子模組

開始使用 Git 子模組(Submodule)管理文件版本,刪除子模組