含分支子模块的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
相关产品推荐
相关产品推荐

