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

Git递归克隆带子模块与--filter=blob:none时退出码128故障排查

故障原因
  • --filter=blob:none这类部分克隆过滤器会让Git在克隆时和远程仓库多次往返协商需要拉取的对象,高延迟慢速网络下,这个协商过程的耗时很容易超过Git默认的超时阈值,导致子模块克隆进程直接报错退出(代码128)。
  • 子模块的克隆是独立的子进程,Git对其超时的处理逻辑比主项目更严格,主项目能扛过的延迟,子模块可能直接触发超时。
  • http.postBuffer参数只影响大文件传输的缓冲区大小,和对象协商阶段的超时问题完全无关,所以调整它没用。
解决方法
  • 调高子模块克隆的超时阈值:执行以下命令全局设置更长的超时时间,给高延迟网络足够的协商时间:

    git config --global submodule.fetchTimeout 600
    git config --global http.lowSpeedLimit 0
    git config --global http.lowSpeedTime 900
    

    (submodule.fetchTimeout设为600秒即10分钟,http.lowSpeedTime设为900秒,让Git不会因为长时间低速传输就断开连接)

  • 改用更温和的部分克隆过滤器:放弃--filter=blob:none,换成只过滤大文件的规则,减少对象协商的次数,比如:

    git clone --filter=blob:limit=1m --recurse-submodules <项目地址>
    

    这个规则只会跳过大于1MB的二进制文件,既节省带宽,又降低超时概率。

  • 分步克隆子模块:先单独克隆主项目,再逐个处理子模块,灵活调整每个子模块的克隆策略:

    1. 先克隆主项目(不带子模块):
      git clone --filter=blob:none <主项目地址>
      cd <主项目目录>
      
    2. 初始化并克隆子模块,可单独加超时参数:
      git submodule update --init --recursive --fetch-timeout 600
      
    3. 如果某个子模块还是失败,单独进入子模块目录,取消部分克隆限制:
      cd <子模块路径>
      git fetch --unshallow
      
  • 开启HTTP持久连接:减少高延迟环境下重复建立连接的开销,提升稳定性:

    git config --global http.keepAlive true
    git config --global http.maxRequests 100
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:03:13