Git 工具的 submodule 功能就是建立了当前项目与子模块之间的依赖关系:子模块路径、子模块的远程仓库、子模块的版本号。
添加submodule
git submodule add <submodule_url> 目录名称
用于在项目中添加一个子模块,在此过程中,会自动将相关代码克隆到对应路径,但对于后续使用者而言,对于主项目使用普通的 clone
操作并不会拉取到子模块中的实际代码。
更新submodule
如果希望子模块代码也获取到,有如下两种方式:
子模块内容的更新
上述步骤在创建子模块的过程中,会自动将相关代码克隆到对应路径,但对于后续使用者而言,对于主项目使用普通的 clone 操作并不会拉取到子模块中的实际代码。submodule对应的文件夹是空的
- 子模块有未跟踪的内容变动: 需要进入子模块文件夹,按照子模块内部的版本控制体系提交代码。
- 子模块有版本变化:当子模块版本变化时,在主项目中使用 git status 查看仓库状态时,会显示子模块有新的提交;在这种情况下,可以使用
git add/commit
将其添加到主项目的代码提交中,实际的改动就是那个子模块 文件 所表示的版本信息
- 子模块远程有更新: 通常来讲,主项目与子模块的开发不会恰好是同时进行的。通常是子模块负责维护自己的版本升级后,推送到远程仓库,并告知主项目可以更新对子模块的版本依赖。需要让主项目主动进入子模块拉取新版代码,进行升级操作。
删除子模块
根据官方文档的说明,应该使用 git submodule deinit
命令卸载一个子模块,自动在 .git/config
中删除了相关配置。这个命令如果添加上参数 --force
,则子模块工作区内即使有本地的修改,也会被移除。
git rm <submodule>
自动在 .gitmodules 中删除对应的配置