子模块跟踪分支是什么
.gitmodules 里可以给子模块配置 branch,指定它应跟踪的分支(不配时跟随子模块远端的默认分支)。配合 git submodule update --remote,子模块会拉到该分支的最新提交并把父仓库记录的子模块指针推进。是否提交这次指针变化由你决定,这正是跟随上游与锁定版本之间的开关。
基本信息
| 配置 | submodule.<名字>.branch = main |
|---|---|
| 特殊值 | 点号表示与父仓库当前分支同名 |
| 更新命令 | git submodule update --remote --merge(或 --rebase) |
| 默认行为 | 不配 branch 时使用子模块远端的默认分支 |
| 结果 | 指针推进到远端分支顶端,未提交前不改变父仓库记录 |
| 核对 | git submodule status 显示当前指针与分支状态 |
典型使用场景
- 内部组件跟随:子模块是自家库,希望同步其主干最新提交
- 审查指针变化:git diff --submodule 看这次更新带来的提交区间
- 分支对齐:monorepo 拆分后父子同分支名联动开发
- CI 预检:定期更新指针跑集成测试,人工确认后提交
配置与更新
配置与更新
git config -f .gitmodules submodule.vendor/common.branch main # 指定跟踪 main
git submodule update --remote --merge vendor/common # 拉取远端并合并进工作区
git diff --submodule # 查看指针与提交区间变化
git add vendor/common && git commit -m 'chore: 更新 common 指针' # 确认后提交三种跟随方式
| 配置 | 行为 | 适用 |
|---|---|---|
| 不配 branch | 跟随子模块远端默认分支 | 简单场景 |
| branch = 名称 | --remote 拉取指定分支 | 稳定分支策略 |
| branch = 点号 | 跟随父仓库当前分支同名 | 父子分支联动开发 |
--remote 会把指针推进到远端分支顶端,不提交就不会改变父仓库记录;不想升级就别提交这次指针变化。
生产仓库建议人工核对后再提交指针:自动更新引入未验证的上游提交是常见风险源,集成测试通过后再推;需要锁版本时改用普通 update 检出固定提交,不提交新指针。