Mac 上 Git 不识别文件名大小写修改?一招搞定!
作为一名经常在 Mac 上开发的程序员,你是否遇到过这样的窘境:明明手动把文件名从大写改成了小写(比如把 README.TXT 改成 readme.txt),但提交 Git 时却发现这个改名操作完全没生效?别慌,这不是 Git 的 bug,而是 Mac 文件系统和 Git 默认配置的 "小摩擦",下面来看看如何解决这个问题。
一、问题复现:改了大小写,Git 却 "看不见"
场景很典型:
-
本地有一个大写文件名的文件,比如
HELLO.md,已经被 Git 追踪; -
手动右键重命名,或用
mv HELLO.md hello.md改成小写; -
执行
git status查看状态,结果 Git 显示 "working tree clean / 工作区干净",完全没检测到文件名的变化; -
试图直接
git add也没用,改名仿佛 "石沉大海"。
二、根因分析:Mac 文件系统的 "大小写不敏感" 特性
问题的核心在于:
-
Mac 默认的文件系统(APFS/HFS+)通常是大小写不敏感的;
-
在系统层面,
HELLO.md和hello.md会被认为是同一个文件; -
Git 默认会继承操作系统的文件大小写敏感性配置;
-
当 macOS 告诉 Git "这两个文件名是同一个" 时,Git 自然就不会把大小写修改识别为 "文件变更",也就不会记录这个操作了。
三、解决方案:两种思路,按需选择
针对这个问题,有 "临时解决单次问题" 和 "永久配置一劳永逸" 两种方案,可以根据场景选择。
方案 1:临时解决(单次文件名修改)
如果你只是偶尔修改一个文件的大小写,用 git rm --cached 配合 mv 指令就能快速解决,步骤如下:
bash
# 1. 先删除 Git 对原大写文件的追踪(本地文件不会被删除)
git rm --cached 大写文件名 # 示例:git rm --cached HELLO.md
# 2. 用 mv 指令重命名本地文件(如果还没改的话)
mv 大写文件名 小写文件名 # 示例:mv HELLO.md hello.md
# 3. 将小写文件重新加入 Git 追踪
git add 小写文件名 # 示例:git add hello.md
# 4. 提交修改
git commit -m "rename: 文件名大小写调整(HELLO.md -> hello.md)"
执行完这四步后,再用 git status 就能看到 Git 已经正确识别到文件名的修改了,后续正常 push 即可。
方案 2:永久配置(全局 / 仓库级识别大小写)
如果你经常需要修改文件名大小写,每次都手动执行临时方案会很繁琐,这时候可以修改 Git 的配置,让它强制识别文件名大小写。
方式 A:仅当前仓库生效(推荐)
进入你的 Git 仓库根目录,执行以下命令,仅对当前项目生效:
bash
cd /path/to/your/repo # 进入你的项目目录
git config core.ignorecase false
方式 B:全局生效(所有 Git 仓库)
如果想让所有本地 Git 仓库都识别文件名大小写,执行全局配置命令:
bash
git config --global core.ignorecase false
四、关键注意事项
-
先提交其他修改 :操作前一定要确保工作区其他未提交的修改已经提交或暂存,避免执行
git rm --cached时误删其他文件的追踪。 -
跨平台兼容要注意 :如果你的仓库需要在 Windows/macOS(大小写不敏感)和 Linux(大小写敏感)之间切换,建议尽量保持文件名全小写,避免仅靠大小写区分文件(比如同时存在
File.txt和file.txt),否则在不同系统上可能出现文件冲突。 -
验证配置是否生效:修改配置后,可以用以下命令确认是否成功: `# 查看当前仓库的大小写敏感配置 git config core.ignorecase
查看全局的大小写敏感配置
git config --global core.ignorecase 输出false` 就说明配置生效了。
五、总结
-
Mac 上 Git 不识别文件名大小写修改,本质是 文件系统特性 与 Git 默认配置 的冲突;
-
通过
git rm --cached + mv的临时方案可以快速解决单次问题; -
修改
core.ignorecase配置则能在项目或全局层面 "一劳永逸"。
掌握这两种方法后,就不用再担心文件名大小写的 "Git 盲区" 了。如果你也遇到过类似的问题,或者有其他解决技巧,也可以在团队内部文档或代码规范里补充说明,方便大家排坑。