Git子模块
1.1 简介
在项目开发中,我们会整理出一些通用的逻辑,也可能是一下底层的工具包,这些逻辑一般情况下会用在多个项目中,那么我们如何保证这些通用逻辑在多个项目中保持一致呢,Git提供了子模块的方式来实现这个功能。
首先我们要做的把通用逻辑放到Git版本库中进行管理,其他项目只要把这个项目当做子模块给管理起来,你就可以像引用本地文件一样,引用子模块里的变量,方法了。
当然一个项目可以添加多个子模块,如下图所示:
1.2 操作步骤
1.2.1 添加子模块
- 情形一:首次添加子模块
注:主项目必须已经被Git管理并且可以通过远程访问到子模块Git地址。
# 语法
git submodule add <submodule_url> [path]
# 示例
git submodule add http://127.0.0.1/Zet/ZetEdgeUtils.git
# path参数还可以指定引用路径
git submodule add http://127.0.0.1/Zet/ZetEdgeUtils.git utils
添加完成后,通常我们可以使用git commit -m 'add submodule xxx'
提交一次,表示引入了某个子模块。
- 情形二:主项目已经添加子模块,刚刚clone到本地,此时需要对子模块进行初始化操作,如下:
git submodule update --init --recursive
1.2.2 更新子模块
当子模块更新以后,需要用户手动更新,命令如下:
# 该命令会更新项目下所有子模块,通过master分支更新
git submodule update --remote
当子模块不在master分支进行更新时,我们应该如何处理呢?
- 方式一: 通过git命令设置子模块的更新分支
# 设置子模块的更新分支为develop
git config -f .gitmodule submodule.ZetEdgeUtils.branch develop
- 方式二: 直接修改.gitmodules文件,指定更新分支
# 文件名: .gitmodules
[submodule "utils"]
path = utils
url = http://127.0.0.1/Zet/ZetEdgeUtils.git
branch = develop
1.2.3 删除子模块
删除命令如下:
# 删除子模块
git submodule deinit <submodule_name>
# 删除子模块所在的文件夹
git rm <submodule_name>
# 示例
git submodule deinit utils
git rm utils