You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行git submodule update时git fetch从哪个远程拉取?如何配置?

git submodule update指定fetch远程仓库解决方案

子模块fetch远程的默认规则

git submodule update执行fetch操作时的默认逻辑如下:

  • 首次初始化子模块时,默认使用父仓库.gitmodules文件中对应子模块的url字段创建名为origin的远程仓库,后续fetch默认从该远程拉取
  • 若子模块已完成初始化,且未做特殊配置,git会优先查找子模块本地名为origin的远程执行fetch,找不到时会遍历子模块所有已配置的远程尝试拉取,这就是你遇到多远程报错的核心原因

解决方法

你可以通过两种方式指定固定的fetch远程,无需将远程重命名为origin:

方式1:长期配置固定fetch远程

在父仓库根目录执行以下命令,为对应子模块绑定固定的fetch远程:
git config submodule.<子模块相对路径>.remote <目标远程名>
示例:如果子模块路径为src/vendor/toolkit,要使用的远程名为official,则执行:
git config submodule.src/vendor/toolkit.remote official
配置完成后再次执行git submodule update就会固定从你指定的远程拉取,不会遍历所有远程触发报错。

方式2:单次执行时指定远程

如果不需要长期配置,仅单次操作需要指定远程,可以先进入子模块手动拉取对应远程的提交,再执行update:

cd <子模块相对路径>
git fetch <目标远程名>
cd ../.. # 回到父仓库根目录
git submodule update

此时子模块已经缓存了需要的提交记录,update操作不会再触发多远程fetch逻辑。

报错原因说明

你遇到的fatal: --stdin can only be used when fetching from one remote报错,是Git 2.24及以上版本的优化逻辑导致:新版本git submodule update默认使用--stdin参数批量传递要拉取的提交哈希,该参数仅支持单远程场景,子模块多远程且无默认origin远程时就会触发冲突,按上述方法指定固定远程即可解决。

内容的提问来源于stack exchange,提问作者mic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:06:02