Git 强制区分文件名大小写:完整配置与实操指南

2025-11-27 yvsm 工具与使用

在日常开发中,很多开发者会遇到 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"

三、注意事项(跨系统兼容)

重要提醒: Git 的大小写配置仅控制自身行为,最终仍受操作系统文件系统限制,需注意跨平台兼容问题。

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 需注意文件系统本身的大小写规则,避免本地文件覆盖。