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 commit -m "临时改名"
git mv temp-name.txt MyFile.txt
git commit -m "改回目标大小写"
根源与全局解法
Git 有个配置 core.ignorecase,macOS/Windows 上克隆时自动设为 true(尊重文件系统的大小写不敏感)。可以关掉让 Git 严格区分:
git config core.ignorecase false
但这只是检测层面的缓解,文件系统层面的冲突仍在——比如 Linux 上 Readme.md 和 README.md 能共存,克隆到 macOS 就会互相覆盖。团队规范:文件名一律小写、单词间用连字符,从源头杜绝大小写问题。
常见问题(FAQ)
Q:改名在 Linux CI 上构建失败但本地正常?
本地大小写不敏感没暴露问题,Linux 严格区分。import 路径、资源引用的大小写必须与仓库内文件名完全一致。
Q:怎么检查仓库里有没有"仅大小写不同"的文件对?
git ls-files | sort -f | uniq -di 能列出冲突对(sort -f 忽略大小写排序后找相邻重复)。
Q:目录名大小写问题同样适用吗?
同样适用,同样用 git mv 旧目录 临时 && git mv 临时 新目录 两步法处理。