更新 git 資料夾下的所有子模組
開始使用 Git 子模組(Submodule)管理文件版本,更新 git 資料夾下的所有子模組
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
在 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 指令時可以加入 --recursive
參數,直接抓取該 repository 的所有子資料夾
git clone --recursive git@github.com:kejyun/KJ.git
git 專案可以使用各種子模組去管理專案,但若子模組也有載入子模組的話,會需要依序地進去各個子模組將模組的子子模組抓下來,這樣會造成很大的困擾,所以可以使用下列指令一次就將所有的子模組皆載入下來
git submodule update --init --recursive
因為子模組也可能會有自己的子模組,如果互相引用的話在抓取專案可能會造成 遞迴
的狀況,導致專案 無窮迴圈永遠抓不完
所以在規劃子模組至專案是,記得要規範好不同模組之間的依賴關係,小心 不要造成遞迴子模組載入 的狀況
- 複雜的 Repositoy
- 獨立的元件 Repository Submodule
- 獨立的 Helper Method Repositoy Submodule
開始使用 Git 子模組(Submodule)管理文件版本,更新 git 資料夾下的所有子模組
開始使用 Git 子模組(Submodule)管理文件版本,刪除子模組