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

含分支子模块的Git仓库递归克隆报错求助

问题

我用Git子模块+分支作为临时包管理系统,为Godot引擎开发插件——通过GitHub Action把插件发布到仓库的release分支,再将该分支作为其他插件/项目的子模块使用。

现在遇到嵌套子模块的问题,依赖结构如下:

FixedGodotVolatilePhysicsRollback
|-> FracturalCommons
'-> FixedGodotVolatilePhysics
   '-> FracturalCommons

执行递归克隆命令时出错:

git clone --recurse-submodules https://github.com/Fractural/GodotFixedVolatilePhysicsRollback.git
Cloning into 'GodotFixedVolatilePhysicsRollback'...
remote: Enumerating objects: 493, done.
remote: Counting objects: 100% (493/493), done.
remote: Compressing objects: 100% (291/291), done.
remote: Total 493 (delta 185), reused 493 (delta 185), pack-reused 0
Receiving objects: 100% (493/493), 2.24 MiB | 11.94 MiB/s, done.
Resolving deltas: 100% (185/185), done.
Submodule 'addons/FracturalCommons' (https://github.com/Fractural/FracturalCommons.git) registered for path 'addons/FracturalCommons'
Submodule 'addons/GodotFixedVolatilePhysics' (https://github.com/Fractural/GodotFixedVolatilePhysics.git) registered for path 'addons/GodotFixedVolatilePhysics'
Submodule 'addons/GodotRollbackNetcodeMono' (https://github.com/Fractural/GodotRollbackNetcodeMono.git) registered for path 'addons/GodotRollbackNetcodeMono'
Submodule 'addons/godot-rollback-netcode' (https://github.com/Fractural/GodotRollbackNetcodeMono.git) registered for path 'addons/godot-rollback-netcode'
Cloning into 'C:/Location/GodotFixedVolatilePhysicsRollback/addons/FracturalCommons'...
remote: Enumerating objects: 1157, done.
remote: Counting objects: 100% (328/328), done.
remote: Compressing objects: 100% (225/225), done.
remote: Total 1157 (delta 150), reused 273 (delta 100), pack-reused 829
Receiving objects: 100% (1157/1157), 2.62 MiB | 8.59 MiB/s, done.
Resolving deltas: 100% (571/571), done.
Cloning into 'C:/Location/GodotFixedVolatilePhysicsRollback/addons/GodotFixedVolatilePhysics'...
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (458/458), done.
remote: Compressing objects: 100% (285/285), done.
remote: Total 1400 (delta 275), reused 308 (delta 159), pack-reused 942
Receiving objects: 100% (1400/1400), 70.60 MiB | 15.96 MiB/s, done.
Resolving deltas: 100% (764/764), done.
Cloning into 'C:/Location/GodotFixedVolatilePhysicsRollback/addons/GodotRollbackNetcodeMono'...
remote: Enumerating objects: 187, done.
remote: Counting objects: 100% (187/187), done.
remote: Compressing objects: 100% (144/144), done.
remote: Total 187 (delta 51), reused 169 (delta 33), pack-reused 0
Receiving objects: 100% (187/187), 421.51 KiB | 5.94 MiB/s, done.
Resolving deltas: 100% (51/51), done.
Cloning into 'C:/Location/GodotFixedVolatilePhysicsRollback/addons/godot-rollback-netcode'...
remote: Enumerating objects: 187, done.
remote: Counting objects: 100% (187/187), done.
remote: Compressing objects: 100% (144/144), done.
remote: Total 187 (delta 51), reused 169 (delta 33), pack-reused 0
Receiving objects: 100% (187/187), 421.51 KiB | 7.81 MiB/s, done.
Resolving deltas: 100% (51/51), done.
Submodule path 'addons/FracturalCommons': checked out 'ba68b154508ff4239fd864ceb6c81bb899e44936'
Submodule path 'addons/GodotFixedVolatilePhysics': checked out '7293bbf098bd1613c47f0377d5d753a5611ee24b'
fatal: No url found for submodule path 'addons/GodotFixedVolatilePhysics/addons/FracturalCommons' in .gitmodules
fatal: Failed to recurse into submodule path 'addons/GodotFixedVolatilePhysics'

拉取的是release分支,该分支不含.gitmodules文件,仅包含插件文件夹,理论上不需要递归FixedGodotVolatilePhysics的子模块,请问如何避免这个错误?

解决方案
  • 手动初始化顶层子模块,跳过递归嵌套
    先克隆主仓库,再单独初始化直接依赖的子模块,不触发嵌套递归:

    git clone https://github.com/Fractural/GodotFixedVolatilePhysicsRollback.git
    git submodule update --init
    

    此操作只会处理主仓库.gitmodules中定义的直接子模块,不会深入嵌套子模块。

  • 修改主仓库子模块配置,禁用嵌套递归
    在主仓库的.gitmodules文件中,给FixedGodotVolatilePhysics子模块添加ignore = all配置,让Git忽略该子模块内部的嵌套依赖:

    [submodule "addons/GodotFixedVolatilePhysics"]
        path = addons/GodotFixedVolatilePhysics
        url = https://github.com/Fractural/GodotFixedVolatilePhysics.git
        ignore = all
    

    提交该修改到主仓库后,执行git clone --recurse-submodules就不会尝试递归该子模块的内部内容。

  • 克隆时指定仅递归特定子模块
    明确指定需要递归的直接子模块路径,跳过可能引发问题的子模块:

    git clone --recurse-submodules="addons/FracturalCommons,addons/GodotRollbackNetcodeMono" https://github.com/Fractural/GodotFixedVolatilePhysicsRollback.git
    

    后续可单独处理FixedGodotVolatilePhysics子模块,无需递归它的内部依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:55:35