Git 子模块只更新部分模块的问题排查总结

问题描述

在执行 git submodule update --init --recursive 命令时,虽然 .gitmodules 文件中定义了 3 个子模块,但只有 handy-ollama 被更新,其他两个子模块没有被处理。

> git submodule update --init --recursive
Submodule 'handy-ollama' (git@github.com:datawhalechina/handy-ollama.git) registered for path 'handy-ollama'
Cloning into '/home/tipriest/Documents/Lessons/handy-ollama'...
Submodule path 'handy-ollama': checked out '17e036306ee945dbeb600811a886dd430af658cb'

环境信息

  • 操作系统: Linux
  • Shell: zsh
  • Git 版本: 现代版本
  • 子模块配置: 3 个子模块定义在 .gitmodules

排查过程

1. 检查子模块状态

首先检查当前所有子模块的状态:

git submodule status

结果: 只显示了 handy-ollama 一个子模块

 17e036306ee945dbeb600811a886dd430af658cb handy-ollama (17e0363)

2. 检查 .gitmodules 文件

查看 .gitmodules 文件内容:

[submodule "[Datawhale] 模型压缩"]path = [Datawhale] 模型压缩url = git@github.com:datawhalechina/awesome-compression.git
[submodule "handy-ollama"]path = handy-ollamaurl = git@github.com:datawhalechina/handy-ollama.git
[submodule "wow-rag"]path = wow-ragurl = git@github.com:datawhalechina/wow-rag.git

发现: .gitmodules 文件中确实定义了 3 个子模块

3. 检查文件系统中的目录

查看当前目录中是否存在其他子模块的目录:

ls -la

结果: 只有 handy-ollama 目录存在,其他两个子模块的目录不存在

4. 检查 Git 索引中的子模块条目

这是关键的排查步骤:

git ls-files --stage | grep "^160000"

结果: 只有 handy-ollama 在 Git 索引中有记录

160000 17e036306ee945dbeb600811a886dd430af658cb 0       handy-ollama

说明:

  • 160000 是 Git 中子模块的文件模式
  • 只有在 Git 索引中有记录的子模块才会被 git submodule update 处理

5. 检查 .git/modules 目录

ls -la .git/modules/

结果: 只有 handy-ollama 目录存在

根本原因分析

通过以上排查步骤,确定了问题的根本原因:

  1. 配置存在但未注册: .gitmodules 文件中定义了 3 个子模块,但只有 handy-ollama 实际被添加到了 Git 仓库的索引中

  2. Git 索引缺失: 其他两个子模块([Datawhale] 模型压缩wow-rag)只在 .gitmodules 文件中有配置,但没有在 Git 索引中注册

  3. 命令行为限制: git submodule update --init --recursive 只会处理那些在 Git 索引中已经存在的子模块

解决方案

方法 1: 手动添加缺失的子模块

使用 git submodule add 命令添加缺失的子模块:

# 添加模型压缩子模块
git submodule add git@github.com:datawhalechina/awesome-compression.git "[Datawhale] 模型压缩"# 添加 wow-rag 子模块  
git submodule add git@github.com:datawhalechina/wow-rag.git "wow-rag"

方法 2: 清理后重新添加所有子模块

如果问题更复杂,可以清理后重新添加:

# 删除 .gitmodules 文件
rm .gitmodules# 重新添加所有子模块
git submodule add git@github.com:datawhalechina/awesome-compression.git "[Datawhale] 模型压缩"
git submodule add git@github.com:datawhalechina/handy-ollama.git "handy-ollama"
git submodule add git@github.com:datawhalechina/wow-rag.git "wow-rag"

验证解决结果

解决后,再次检查子模块状态:

git submodule status

预期结果: 应该显示所有 3 个子模块

 b28d2f6ab8c1a5e7749620ce19b768473c0d5845 [Datawhale] 模型压缩 (V1.0.0-1-gb28d2f6)17e036306ee945dbeb600811a886dd430af658cb handy-ollama (17e0363)04fe0a7d281916f3dc0d757689cd0fe4ee520e9b wow-rag (heads/main)

关键排查命令总结

命令用途关键信息
git submodule status查看子模块状态显示已注册的子模块
git ls-files --stage | grep "^160000"检查 Git 索引中的子模块160000 模式表示子模块
ls -la .git/modules/查看本地子模块存储显示实际存在的子模块
ls -la检查工作目录确认子模块目录是否存在

经验教训

  1. .gitmodules 文件存在不等于子模块已注册: 仅有配置文件是不够的,必须通过 git submodule add 将子模块添加到 Git 索引中

  2. 排查要全面: 需要同时检查配置文件、Git 索引、文件系统和 Git 内部存储

  3. 理解 Git 子模块机制: 子模块需要在 Git 索引中有对应的条目才能被相关命令处理

  4. 使用正确的添加方式: 直接编辑 .gitmodules 文件不会自动注册子模块,必须使用 git submodule add 命令

预防措施

  1. 始终使用 git submodule add 命令添加子模块,不要手动编辑 .gitmodules 文件
  2. 添加子模块后及时提交更改
  3. 定期使用 git submodule status 检查子模块状态
  4. 在团队中分享子模块的正确使用方法

相关资源

  • Git 官方文档 - 子模块
  • Git 子模块最佳实践

创建日期: 2025年7月17日
最后更新: 2025年7月17日
适用版本: Git 2.x+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89468.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89468.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89468.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 源码7:Lane、React和schedule优先级转换

在《源码3》requestUpdateLane函数根据eventLane获取不同情况对应优先级。一、优先级1.Lane的tag一共有32种lane。var TotalLanes 31; var NoLanes /* */ 0; var NoLane /* */ 0; var SyncLane /* …

Linux RDMA Maillist patchsets (Jul. 7 - Jul. 13, 2025)

1. Optimize DMABUF Mkey Page Size in mlx5 优化 mlx5 中的 DMABUF Mkey 页大小 This patch series enables the mlx5 driver to dynamically select the optimal page size for DMABUF-based memory keys (mkeys), rather than relying on a fixed page size during registr…

Maven详细解

Maven 工具介绍 Maven是Apache组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建、测试、打包和部署。Maven 提供了标准的软件生命周期模型和构建模型,通过配置就能对项目进行全面的管理。它的跨平台性保证了在不同的操作系统上可以使用相…

Springboot儿童摄影服务91f0v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,员工,摄影套餐,套餐系列,客片欣赏,摄影预约,摄影订单,取片通知,摄影评价开题报告内容基于Spring Boot的儿童摄影服务系统设计与实现开题报告一、研究背景与意义随着国家生育政策调整,儿童摄影市场需求呈现爆发式增长。以北…

vue-seo优化

一、为什么 Vue 需要专门做 SEO Vue 默认是客户端渲染 SPA,首屏 HTML 几乎为空,爬虫抓取不到内容;即使 Googlebot 能执行 JS,也存在“渲染预算”与加载延迟问题 二、技术落地 4 条路线 场景技术选型实现要点适用内容更新频…

DNS防护实战:用ipset自动拦截异常解析与群联AI云防护集成

问题场景 DNS服务器常成为黑客探测源IP的首选目标。攻击者通过高频DNS查询获取解析记录,或利用异常请求触发服务器响应,从而定位源站IP。传统单IP拦截效率低下,难以应对分布式攻击。 核心解决方案 ipset自动化拦截 ipset是iptables的扩展&…

养老院跌倒误报频发?陌讯时空图卷积实现95%精准检测

​开篇痛点​​> "传统视觉算法在养老院场景面临三大挑战&#xff1a; > ① 夜间低光照下识别率骤降&#xff08;<50% mAP&#xff09; > ② 多人遮挡场景姿态检测漂移 > ③ 跌倒误报率高达30%&#xff08;某养老机构2024年报告&#xff09;"通…

[spring6: BeanPostProcessor BeanFactoryPostProcessor]-生命周期

BeanFactoryPostProcessor BeanFactoryPostProcessor 接口允许在 Spring 容器初始化完所有的 bean 定义之后&#xff0c;但还未实例化任何 bean 时&#xff0c;修改应用上下文的内部 bean 工厂。通过实现 postProcessBeanFactory 方法&#xff0c;你可以覆盖或添加属性&#xf…

MISRA C-2012准则之声明与定义

目录 一、MISRA C简介 二、声明与定义 1. 必需。类型应被显式声明。 2. 必需。函数应以原型形式命名参数。 3. 必需。所有对象和函数的声明需要使用完全相同的名字和参数。 4. 必需。当定义有外部链接的对象或函数时&#xff0c;兼容声明应是可见的。 5. 必需。外部变量…

【blender】使用Vscode进行blender调试

配置vscodeblender 直接使用blender中的text editor没有代码补全&#xff0c;终端输出通常和blender不在同一个页面&#xff0c;只适合非常简单的代码测试。使用Vscode能有效提高blender调试的效率&#xff0c;具体方式见&#xff1a;VSCode 开发 Blender脚本工具配置。 调试…

Au速成班-乐理知识补充+网页下载音乐

音质分类 通过查看音频频谱&#xff0c;128Kbps、192Kbps、320Kbps、无损&#xff08;Lossless HD&#xff09;CD音质&#xff08;频率都在20kHz以上&#xff09;。 各家平台对无损的定义不一样&#xff0c;em各有说法吧。 无损的含义是&#xff1a;无损失的声音格式。只要能…

JAVA中的Collection集合及ArrayList,LinkedLIst,HashSet,TreeSet和其它实现类的常用方法

文章目录前言一、Collection 接口常用方法1.boolean add(E e)2.boolean remove(Object o)3.boolean contains(Object o)4.boolean isEmpty()5.int size()6.void clear()7.Object[] toArray()8.boolean containsAll(Collection<?> c)9.boolean addAll(Collection<? e…

有n棍棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。

题目描述&#xff1a; 有n棍棍子&#xff0c;棍子i的长度为ai&#xff0c;想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长&#xff0c;若无法组成三角形则输出0。 算法为O(nlogn) 初始理解题目 首先&#xff0c;我们需要清楚地理解题目要求&#xff1a; 输入…

【Echarts】 电影票房汇总实时数据横向柱状图比图

效果图code <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>圆角柱状图</title><script src"https://cdn.jsdelivr.net/npm/echarts5.4.3/dist/echarts.min.js"></script> </head> <…

【深度学习基础】PyTorch中model.eval()与with torch.no_grad()以及detach的区别与联系?

目录1. 核心功能对比2. 使用场景对比3. 区别与联系4. 典型代码示例(1) 模型评估阶段(2) GAN 训练中的判别器更新(3) 提取中间特征5. 关键区别总结6. 常见问题与解决方案(1) 问题&#xff1a;推理阶段显存爆掉(2) 问题&#xff1a;Dropout/BatchNorm 行为异常(3) 问题&#xff1…

博客摘录「 华为云平台-FusionSphere OpenStack 8.2.1 系统加固」2025年7月15日

编号 加固项 "风险 等级" 加固原理/Rationale 审计方法/Audit 期望结果/Expect Results 加固方法/Remediation 1 OpenSSH加固配置 1.1 OpenSSH加固配置 1.1.1 SSH使用的版本 H "Op…

永磁同步电机MTPA与MTPV曲线具体仿真实现

永磁同步电机MTPA与MTPV曲线具体仿真实现 近期做了一些标定试验&#xff0c;实际电机参数并不是确定的&#xff0c;而是变化的&#xff0c;因此很难通过解析的方法算出MTPA的对应点&#xff0c;以及在弱磁区如何过度到MTPV。这个在实际情况下都是一点点标出来的&#xff0c;我这…

Adobe Acrobat 插件功能、应用与开发

什么是 Acrobat 插件&#xff1f; Adobe Acrobat 插件是一种能够扩展 Adobe Acrobat 阅读器/查看器功能的软件组件。Acrobat 是用于查看、创建和编辑 PDF 文档的流行程序&#xff0c;而插件可以为其添加新功能&#xff0c;例如&#xff1a; #mermaid-svg-iqdM1wLkFQhd3ilQ {fon…

Redis学习系列之——高并发应用的缓存问题(二)

一、布隆过滤器布隆过滤器由一个 BitMap 和若干 Hash 函数组成&#xff0c;可以用来快速判断一个值是否存在后端存储中。它是解决 Redis 缓存穿透问题的一个不错的解决方案。工作原理步骤1&#xff1a;当 key-value 键值对存储到 Redis 后&#xff0c;向布隆过滤器添加 key步骤…

Expression 类的静态方法

public static MethodCallExpression Call(Type type, // 包含目标方法的类型string methodName, // 方法名称Type[]? typeArguments, // 泛型方法的类型参数&#xff08;非泛型方法为 null&#xff09;params Expression[]? arguments // 方…