使用git mv移动文件后,GitHub仅Linux/Mac环境文件缺失求助
Git跨平台大小写问题导致迁移文件不显示的排查与解决
问题描述
我负责维护GitHub上的Reko反编译器仓库。近期使用git mv将仓库中src/Analysis目录的文件迁移至src/Core/Analysis,推送至GitHub后出现以下异常:
- Windows CI构建正常,但Linux和MacOS CI失败,迁移的文件未出现在
src/Core/Analysis目录,仅显示被删除状态 - 在GitHub查看
master分支HEAD时,src/Core/Analysis仅显示6个文件,但本地Windows环境能看到至少十几个文件
已尝试的操作:
- 在Windows机器上执行干净的
git clone,文件正常存在 - 在同一机器的WSL中执行干净的
git clone,文件正常存在 - 检查
.gitignore文件,未发现意外添加的规则 - 创建新提交修改所有缺失文件,试图强制文件显示,但GitHub仓库中仍看不到这些文件
核心原因
这是Git跨平台大小写敏感性差异引发的问题:
- Windows文件系统默认不区分大小写,执行
git mv时,若目标目录src/Core/Analysis之前已以其他大小写形式存在(比如src/core/analysis),Windows会自动合并目录,但Git在Linux/MacOS这类区分大小写的系统中,会将不同大小写的目录视为完全独立的实体。 - 迁移操作时,Git仅记录了文件从
src/Analysis删除的操作,并未正确将文件添加到src/Core/Analysis——因为Git索引中已存在大小写不同的同名目录条目,导致新目录下的文件未被正确追踪。
解决步骤
- 切换到区分大小写的环境操作:使用WSL、Linux或MacOS环境打开仓库,确保文件系统严格区分大小写
- 清理Git索引中的冲突条目:
- 切换到问题分支,执行命令:
git rm -r --cached src/Core/Analysis(注意大小写需与当前仓库中显示的一致) - 若存在
src/core/analysis这类大小写不同的目录,同样执行:git rm -r --cached src/core/analysis
- 切换到问题分支,执行命令:
- 重新添加正确的目录与文件:
- 确认
src/Core/Analysis目录结构和文件完整,执行命令:git add src/Core/Analysis/
- 确认
- 提交并推送:创建新提交并推送到GitHub,此时Linux/MacOS CI和GitHub页面应能正确显示所有迁移后的文件
后续注意事项
- 跨平台协作时,严格保持目录和文件名的大小写一致,避免在Windows上创建大小写不同的同名目录/文件
- 若需在Windows上强化Git的大小写敏感性,可执行
git config core.ignorecase false,但此操作可能引发本地文件系统冲突,需谨慎使用
内容的提问来源于stack exchange,提问作者John Källén
相关产品推荐
相关产品推荐

