Git 强制区分文件名大小写:完整配置与实操指南
在日常开发中,很多开发者会遇到 Git 不识别文件名大小写修改的问题(比如将 File.txt 改为 file.txt 后,Git 提示“工作区无变更”)。这是因为 Git 在 Windows/macOS 系统中默认忽略文件名大小写(适配系统文件系统特性),而 Linux 系统默认区分。本文将详细讲解如何让 Git 强制区分文件名大小写,以及解决已存在的大小写变更识别问题。
一、核心配置:开启 Git 大小写敏感
Git 提供了 core.ignorecase 配置项,用于控制是否忽略文件名大小写,默认值为 true(忽略),需将其改为 false 开启区分。
1.1 全局生效(所有 Git 仓库)
执行以下命令,修改 Git 全局配置,永久生效(推荐对个人开发环境配置):
git config --global core.ignorecase false
1.2 仅当前仓库生效
若只需对单个项目生效,进入仓库根目录执行:
git config core.ignorecase false
1.3 验证配置是否生效
执行以下命令查看配置结果,返回 false 表示已开启大小写敏感:
# 查看全局配置 git config --global --get core.ignorecase # 查看当前仓库配置 git config --get core.ignorecase
二、处理已修改大小写的文件(Git 未识别变更)
若已手动修改了文件名的大小写(如 File.txt → file.txt),但 Git 未识别到变更,需通过以下方式让 Git 感知。
2.1 方法 1:通过 git mv 显式重命名(推荐)
直接使用 Git 命令完成重命名,Git 会自动识别大小写变更:
# 示例:将 File.txt 改为 file.txt git mv File.txt file.txt
2.2 方法 2:清除缓存后重新追踪
若文件已修改大小写但 Git 未识别,先清除缓存再重新添加:
# 清除该文件的 Git 缓存 git rm --cached File.txt # 重新添加文件(Git 会识别新的大小写名称) git add file.txt
2.3 提交变更
完成上述操作后,提交变更即可:
git commit -m "修改文件名大小写:File.txt → file.txt"
三、注意事项(跨系统兼容)
3.1 Windows 系统
NTFS 文件系统默认不区分大小写,即使 Git 配置了 ignorecase=false,仍可能出现文件覆盖问题。Windows 10/11 可通过以下命令为单个文件夹开启大小写敏感:
fsutil file setCaseSensitiveInfo 你的项目目录路径 enable
3.2 macOS 系统
APFS 文件系统默认不区分大小写,需创建「区分大小写的卷宗」才能完全避免冲突(适合对大小写敏感的项目)。
3.3 Linux 系统
无需额外配置,Linux 文件系统(如 ext4)默认区分大小写,配置 core.ignorecase=false 后即可正常使用。
3.4 历史提交兼容
开启大小写敏感后,拉取历史分支时若存在大小写冲突的文件,需手动解决(如重命名冲突文件)。
3.5 恢复默认配置(忽略大小写)
若需恢复 Git 默认行为,执行:
# 全局恢复 git config --global core.ignorecase true # 单个仓库恢复 git config core.ignorecase true
总结
核心:通过
git config core.ignorecase false让 Git 区分文件名大小写;实操:修改配置后,通过
git mv或git rm --cached让 Git 识别已修改的大小写文件名;兼容:Windows/macOS 需注意文件系统本身的大小写规则,避免本地文件覆盖。


