Git 如何提交仅大小写变化的文件改名
大小写不敏感系统(Windows/macOS 默认)上,直接把 name.txt 改成 Name.txt Git 检测不到。用 git mv name.txt Name.txt 强制登记;不行就两步走:先 git mv 到临时名提交,再 git mv 回目标名提交。
在 Windows 和 macOS 默认文件系统上,仅在文件管理器中改变大小写,Git 可能不把它识别为所需路径变更(文件系统层面认为这是同一个文件)。用 git mv 旧名 新名 强制登记改名;如果 Git 还是没反应,用"临时名两步法"。
方法一:git mv
git mv myfile.txt MyFile.txt
git commit -m "重命名为大写开头"
方法二:临时名两步走(方法一无effekt时)
git mv myfile.txt temp-name.txt
git mv temp-name.txt MyFile.txt
git commit -m "改回目标大小写"
根源与全局解法
Git 有个配置 core.ignorecase,在大小写不敏感的文件系统上克隆时通常设为 true。该值由 Git 检测文件系统能力设置,不应把改成 false 当成通用修复。查看当前值:
git config --get core.ignorecase
配置不能改变文件系统的大小写语义,强行改值可能导致异常;文件系统层面的冲突仍在——比如源文件系统允许 Readme.md 和 README.md 共存,检出到大小写不敏感的文件系统时可能冲突。团队规范:文件名一律小写、单词间用连字符,从源头杜绝大小写问题。
常见问题(FAQ)
Q:改名在 Linux CI 上构建失败但本地正常?
本地大小写不敏感没暴露问题,Linux 严格区分。import 路径、资源引用的大小写必须与仓库内文件名完全一致。
Q:怎么检查仓库里有没有"仅大小写不同"的文件对?
git ls-files | sort -f | uniq -di 只能作为简单 ASCII 路径的线索,通常每组只显示一个代表,并非完整文件对;locale、换行文件名和 Unicode 大小写仍需更严格检查。
Q:目录名大小写问题同样适用吗?
同样适用,同样用 git mv 旧目录 临时 && git mv 临时 新目录 两步法处理。