在同一个项目里,FOO.txt、foo.txt 和 Foo.txt 是否指向同一份文件,取决于文件系统和目录的大小写规则。区分大小写时,三个名称可以代表三个不同的文件;不区分大小写时,它们通常指向同一文件。
跨 Windows 与 Linux 工作时,这个差异会影响 Git 检出、依赖安装和构建脚本。修改之前,先确认项目实际存放在哪里,以及参与工作的 Windows 应用能否正确处理大小写。
Windows 和 Linux 的默认规则
Windows 文件系统通常把只在大小写上不同的文件名视为等价;Linux 文件系统通常把它们视为不同名称。在 WSL 的 Linux 文件系统中,文件和目录默认区分大小写。
Windows 的 NTFS 支持为单个目录设置大小写敏感标志。因此,可以让某个 NTFS 目录容纳 Linux 项目中只在大小写上不同的文件,而不用把整块 Windows 磁盘都改成相同的规则。通过 DrvFs 挂载到 WSL 的 Windows 驱动器,例如 /mnt/c,还会受到挂载选项的影响。
这项兼容能力也有边界。有些 Windows 应用会把文件名转换成全大写或全小写,或者假定大小写无关;它们可能在区分大小写的目录里找不到文件。Microsoft 文档还提醒,Windows 应用在这种目录树中创建的新目录可能不会保持你期望的规则。文件资源管理器能显示两个名称,也不等于每个应用都能分别正确打开它们。
先查询目录的当前状态
在 PowerShell 中查询一个 NTFS 目录:
fsutil.exe file queryCaseSensitiveInfo "C:\Projects\case-test"
把示例路径换成要检查的目录。路径中含有空格时,保留双引号。在父目录内查询一个相对路径也可以:
fsutil.exe file queryCaseSensitiveInfo case-test
这里使用的子命令是 queryCaseSensitiveInfo。原文第二个查询示例误写成了不带状态参数的 setCaseSensitiveInfo;查询当前状态时,应使用上面的查询命令。
为一个新目录启用或关闭大小写敏感性
Microsoft 文档记载,按目录设置大小写敏感性从 Windows 10 内部版本 17107 开始获得支持;内部版本 17692 扩展了从 WSL 内检查和修改标志的支持。文档以 system.wsl_case_sensitive 这个扩展属性描述状态:0 表示不区分大小写,1 表示区分大小写。
按文档要求,修改标志时需要以管理员身份运行 PowerShell,并具备目标目录的写入属性、创建文件、创建文件夹,以及删除子文件夹和文件的权限。
为 NTFS 目录启用大小写敏感性:
fsutil.exe file setCaseSensitiveInfo "C:\Projects\case-test" enable
恢复为不区分大小写:
fsutil.exe file setCaseSensitiveInfo "C:\Projects\case-test" disable
采用最清楚的操作顺序:新建空目录,修改标志,查询确认,再把项目复制或检出进去。Microsoft 文档要求目录为空时修改该属性;尤其不能在已经含有名称仅大小写不同的文件或目录时直接关闭标志。先处理名称冲突,再考虑恢复默认规则。
不要用“先复制进不区分大小写的目录,再修改标志”的方式保全一组冲突文件:复制时已经发生的覆盖不会因为后来启用大小写敏感性而自动恢复。
子目录会如何继承
一般情况下,新建目录会继承父目录的大小写敏感性。WSL 1 是文档列出的例外:在 WSL 1 中,新建子目录不会自动继承这个按目录标志,需要为每个目录明确设置。
项目中同时使用 Windows 与 WSL 工具时,创建子目录后再查询一次状态,可以避免把父目录的规则误认为整棵目录树的保证。
在 WSL 中设置 Windows 驱动器的挂载规则
每个 Linux 发行版可以有自己的 /etc/wsl.conf。这份文件设置发行版级行为,和 Windows 用户目录中的 .wslconfig 作用范围不同。
在目标发行版的终端里,直接打开配置文件:
sudo nano /etc/wsl.conf
文件不存在时,编辑器保存会创建它;已经存在时,应保留其他节和选项,把所需的 case 项合并进已有的 [automount] 配置。
Microsoft 文档列出三个 DrvFs 大小写选项:
| 选项 | 用途与边界 |
|---|---|
off |
文档列出的默认选项:挂载的 NTFS 目录按不区分大小写的规则处理。 |
dir |
按单个目录的大小写敏感标志处理。 |
force |
把挂载驱动器上的目录都视为区分大小写;文档将此选项限定在 WSL 1,并说明可能需要注册表设置。 |
以下是三个互斥的配置示例;选择一项合并到配置中,不要重复写三份同名节。选项字符串采用 Microsoft 当前高级设置文档中的写法。
默认规则:
[automount]
options = "case=off"
按目录处理:
[automount]
options = "case=dir"
WSL 1 的强制模式:
[automount]
options = "case=force"
如果原有 options 还包含 metadata、uid 等设置,保留这些已有选项,并用逗号分隔,例如将 case=dir 合并进同一个字符串。不要把这里的简化示例覆盖到不相关的现有配置上。
对旧版 WSL 1 的 force 模式,原文提供了以下管理员命令,用于添加可能需要的注册表值:
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\lxss /v DrvFsAllowForceCaseSensitivity /t REG_DWORD /d 1
这是针对文档所述历史配置的操作,不应作为现代 WSL 2 的默认步骤。先确认自己正在使用 WSL 1、确实需要强制模式,再查阅相应版本的官方说明。
修改 wsl.conf 后,需要让发行版停止并重新启动,配置才会重新读取。Microsoft 文档提供的命令是:
wsl --shutdown
它会停止正在运行的 WSL 实例;执行前保存正在进行的工作,之后重新启动发行版。当前高级设置文档还列出 wsl --terminate <distroName>,用于停止指定发行版。
/etc/wsl.conf 的自动挂载选项适用于该发行版自动挂载的驱动器;只想为某一驱动器指定默认挂载选项时,可以通过 /etc/fstab 设置。配置格式和挂载行为可继续参考 WSL 高级设置 与 fstab 手册。
修改已经挂载的 NTFS 目录
Windows 驱动器挂载到 WSL 后,仍然可以按前述方式通过 fsutil.exe file setCaseSensitiveInfo 为 NTFS 目录启用或关闭标志。WSL 的 Linux 文件系统,例如使用 EXT4 的发行版目录,默认区分大小写,不能用这个 NTFS 工具把它改成不区分大小写。
在 WSL 运行期间修改现有挂载目录时,确保没有 WSL 进程持有该目录的引用。把该目录或其子目录作为当前工作目录也属于引用;这种情况下,修改可能不会产生预期效果。
Git 的设置需要与文件系统相符
Git 的 core.ignorecase 控制它在不区分大小写的文件系统上采用的兼容处理。它不会改变 NTFS 或 Linux 文件系统本身的规则。Git 官方文档说明,初始化或克隆仓库时会探测文件系统,并在需要时启用该设置;手动修改可能造成意外行为。
先查看当前仓库的设置:
git config --get core.ignorecase
若确实需要调整,原文给出:
git config core.ignorecase false
以及:
git config core.ignorecase true
这些命令默认写入当前仓库的配置。不要只靠设成 false 来让一个不区分大小写的目录容纳冲突文件;这样可能出现假冲突、重复名称或其他混淆。先确认底层目录行为,再判断是否需要改变 Git 的兼容设置。Git 配置文档
常见错误的处理顺序
项目需要同时保留不同大小写的文件,但 Windows 工具处理失败
新建空的 NTFS 目录,启用并查询大小写敏感标志,然后从原始来源重新克隆或解压项目。若文件此前已经复制到不区分大小写的目录并发生覆盖,应从原始来源或备份恢复;设置标志不能找回被覆盖的内容。
提示“目录不为空”
创建一个新空目录,先设置规则,再移入文件。不要在含有大小写冲突的目录里关闭标志。
提示“访问被拒绝”
确认 PowerShell 已提升为管理员,并核对目标目录权限。可以在目标目录运行 explorer.exe . 打开资源管理器,再通过目录属性中的“安全”设置查看有效权限。重点检查写入属性、创建文件、创建文件夹,以及删除子文件夹和文件的权限;仅能读取目录不足以修改此标志。
原文附有目录权限窗口截图。这里改用文字列出需要检查的权限,避免让某台机器上的用户名、账户和路径成为通用操作要求。
提示“此操作需要本地 NTFS 卷”
该属性用于 NTFS 目录。先确认目标路径所在的文件系统;WSL 的 Linux 文件系统有自己的大小写语义,不适用 fsutil.exe 的这项设置。
来源与许可
本文依据 Microsoft 官方中文文档 《调整区分大小写》 进行中文整理,并对照 官方源文件、WSL 高级设置文档 与 Git 配置文档。原中文页显示更新日期为 2025 年 6 月 10 日,核对日期为 2026 年 10 月 3 日。
文档作者及版权归属为 Microsoft 和相关贡献者;MicrosoftDocs/WSL 文档采用 CC BY 4.0,可参见 仓库许可证。本次修改包括中文表达整理、纠正相对路径查询示例、规范化挂载选项字符串、澄清 Git 设置的作用,并以文字替换权限截图。文档按原许可“现状”提供,不含保证。示例代码的仓库许可为 MIT。
可继续阅读 Microsoft 的 按目录区分大小写与 WSL 和 改进按目录区分大小写支持。











暂无评论内容