Submodule
在企业级项目开发中,对于较复杂的项目,不可避免地会引用一些公共基础库, 或是将代码拆解成公共模块和多个子模块进行管理,主项目工程中的子模块需要对公共 模块有依赖关系,却又不必关心公共模块内部的开发流程细节,若直接将公共代码复制到 项目中显然是不合适的,因为不方便更新维护 https://cloud.tencent.com/developer/article/1803958
创建submodule¶
git 工具的submodule其实是建立了当前项目与子模块间的依赖关系: 子模块路径、子模块远程仓库、子模块版本号。创建子模块:
git submodule add <submodule_url> <submodule_local_path>
foo @ abcd1234
获取submodule¶
使用git submodule add
命令会自动拉取子工程项目代码到指定目录,但其他开发者获取主项目代码时,
使用 git clone 命令是不会拉取到子项目的代码的,必须运行两条命令:
git submodule init # 初始化本地配置文件
git submodule update # 检出对应的 commit id 的子项目
--recurse-submodules
或--recursive
参数递归拉取子模块代码。
git clone --recursive /path/to/repos/foo.git
更新submodule¶
子项目通常由另外一个项目进行维护,通常不会在主项目中更改子项目内容
主项目更新了子项目的commit id¶
git submodule update
主项目未更新子项目的commit id¶
需要在主项目中进入子项目执行
git pull
删除submodule¶
git submodule deinit -f <submodule-name> # -f 参数将同时删除子模块工作区内的修改
rm -rf .git/modules/path/to/submodule
git rm -f --cached path/to/submodule
.gitmodules
文件下的相关条目
submodule批量执行命令¶
若一个项目中有多个子模块需要执行相同的操作,每次切换到对应的目录挨个执行效率太低,此时可以使用git submodule foreach <command>
\
git submodule foreach git checkout master
git submodule foreach git pull