子模组(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)管理文件版本,删除子模组