当前位置: 首页 > java >正文

【git fetch submodule报错】Errors during submodule fetch 如何解决?

本教程针对git中进行git fetch origin 来获取远程仓库最新状态时发生的Errors during submodule fetch的问题,进行解答,同时也是我在做CS61B时进行协作时发生的问题(比如同时用Win主机和wsl进行协作)

问题重现

在skeleton-sp21的主仓库中添加了一个library-sp21的submodule,然后在另一台主机中运行git fetch origin时出现了以下报错Error:
SubmoduleFetchError
报错信息显示在fetch子模块的过程中出现了错误,原因是没有远程仓库中找不到该子模块引用的那条提交,也就是26c74c...的这一条

git子模块的本质

子模块是一个Git仓库里引用另一个Git仓库的方式
在主仓库的.gitmodules文件里记录了子模块路径和URL
主仓库本身并不会记录子模块的完整代码,而是记录该子模块仓库中的某一个commit
所以主仓库说的是:你这个子模块应该要checkout到这个特定的commit才对(比如26c74c...

问题核心

主仓库要求子模块library-sp21切换到26c74c...这个commit,但是Git去子模块仓库一看:这个commit并不存在!

解决方案

1.手动checkout子模块到一个存在的提交

cd library-sp21
git fetch
git checkout main    # 或者 master、或你知道的某个 tag/commit
cd ..
git add library-sp21
git commit -m "Fix broken submodule reference"

这样我们可以“修正”主项目对子模块的引用,从而避免引用不存在的commit

2.修改.gitmodule

在你fork主仓库的情况下,主项目的子模块引用的是它自己的子模块路径,你可能需要更改为自己的fork地址

vim .gitmoduls

然后修改URL,改为你自己可访问的地址,然后运行:

git submodule sync
git submodule update --init --recursive --force

3.重新初始化子模块(尝试自动修复)

git submodule deinit -f library-sp21
rm -rf .git/modules/library-sp21
git submodule update --init --recursive

通过运行上面的命令,我们做了三件事:

  1. 取消初始化子模块并删除其git配置和工作目录
  2. git submodule init
  • 读取.gitmodules中的子模块信息
  • 然后注册到本地的.git/config
  1. git submodule update
  • 去每个子模块的远程仓库拉取
  • checkout到主仓库指定的commit

我使用的解决方案

运行:

git submodule update --init --recursive

即可完美解决这个问题,再运行git fetch origin也没有再发生报错了

http://www.xdnf.cn/news/15396.html

相关文章:

  • 【Java EE】多线程-初阶 认识线程(Thread)
  • urlencode、html实体编码、unicode
  • 进程---基础知识+命令+函数(fork+getpid+exit+wait+exec)
  • ACL流量控制实验
  • 12.如何判断字符串是否为空?
  • 记字节前端面试一道简单的算法题
  • 游戏玩法的专利博弈
  • 大话数据结构之 <链表>(C语言)
  • 使用 keytool 在服务器上导入证书操作指南(SSL 证书验证错误处理)
  • 【DOCKER】-4 dockerfile镜像管理
  • Python数据容器-通用功能
  • grpo nl2sql qwen3 模型强化学习训练有效果的成立条件有哪些
  • java--ThreadLocal创建以及get源码解析
  • 131. Java 泛型 - 目标类型与泛型推断
  • RNN(循环神经网络)
  • js与vue基础学习
  • Cesium源码打包
  • 从数据库到播放器:Java视频续播功能完整实现解析
  • Netty编程模型介绍
  • 聚宽sql数据库传递
  • 【WPF】WPF 自定义控件 实战详解,含命令实现
  • Node.js + Express的数据库AB View切换方案设计
  • 渗透笔记1-4
  • vim扩展
  • Spring Boot Cucumber 测试报告嵌入方法
  • Linux 基础命令详解:从入门到实践(1)
  • 微前端框架深度对决:qiankun、micro-app、wujie 技术内幕与架构选型指南
  • MFC UI表格制作从专家到入门
  • MyBatis 在执行 SQL 时找不到名为 name 的参数
  • Unsloth 实战:DeepSeek-R1 模型高效微调指南(下篇)