git submodule
在一个 Git 仓库中嵌入另一个 Git 仓库作为子目录
语法
git submodule [<subcommand>] [<options>]
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
add <url> [<path>] |
添加子模块 | |
常用 |
init |
初始化本地子模块配置 | |
常用 |
update |
拉取子模块内容 | |
常用 |
update --init --recursive |
初始化并递归更新所有子模块 | |
常用 |
status |
查看子模块状态 | |
常用 |
deinit <path> |
注销子模块 | |
常用 |
示例
添加一个子模块到 libs/utils 目录
git submodule add https://github.com/lib/utils.git libs/utils
克隆项目后初始化所有子模块
git submodule update --init --recursive
更新子模块到远程最新提交
git submodule update --remote
克隆时自动初始化子模块
git clone --recurse-submodules <url>
批量更新所有子模块
git submodule foreach 'git pull origin main'
技巧
- 克隆含子模块的项目后必须执行 git submodule update --init
- 子模块指向特定 commit,更新后需要在父仓库提交新的引用
- 现代项目更推荐用包管理器(npm/pip)管理依赖,子模块适合管理内部共享库
- 删除子模块比较麻烦,需要同时清理 .gitmodules、.git/config 和目录