【git】含有子模块的仓库更新

的 Git 子模块更新速查表,按常见场景给出最稳命令👇

克隆(含子模块)

# 一次性把主仓库 + 所有层级子模块都拉齐
git clone --recurse-submodules <repo-url>
# 如果已 clone 但没带子模块:
git submodule update --init --recursive

常规更新(主仓库 + 子模块)

# 方式1:一次完成(推荐)
git pull --recurse-submodules
git submodule update --init --recursive

# 方式2:默认就自动递归(长期设置)
git config submodule.recurse true      # 仅当前仓库
# 或
git config --global submodule.recurse true
# 之后普通 git pull 就会自动递归

子模块“跟踪分支”更新(而不是固定到父仓库记录的提交)

只有当你的子模块在 .gitmodules 里设置了 branch = <name>,或你明确想拉分支最新。

# 把子模块拉到其远端分支的最新(而非父仓记录的commit)
git submodule update --remote --recursive

# 若想把这些更新合并到当前修改(而不是硬切)
git submodule update --remote --recursive --merge
# 或强制切到远端最新(丢本地更改)
git submodule update --remote --recursive --checkout

切换分支后对子模块对齐

git checkout <branch>
# 让子模块检出到父仓该分支记录的精确提交
git submodule update --init --recursive --checkout

子模块 URL/路径变化后同步

# .gitmodules 或远端改了子模块地址
git submodule sync --recursive
git submodule update --init --recursive

查看状态/排错

git submodule status --recursive      # 看当前每个子模块所处提交
git submodule summary --recursive     # 看与父仓记录的差异

提交涉及子模块的改动

子模块本身要在各自仓库提交并推送;父仓只记录“子模块指针(commit hash)”的变化

# 在子模块目录内提交并推送
cd path/to/submodule
git add -A && git commit -m "fix ..." && git push

# 回到父仓,记录指针变化
cd -  # 回父仓根目录
git add path/to/submodule
git commit -m "bump submodule to <new-commit>"
git push

可选:浅克隆加速

git clone --recurse-submodules --depth=1 --shallow-submodules <repo-url>

小结

  • 想一把梭更新git pull --recurse-submodules && git submodule update --init --recursive
  • 想长期省心git config submodule.recurse true
  • 想让子模块跟远端分支走git submodule update --remote --recursive(确认 .gitmodules 里有 branch= 或手动指定分支)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值