要让 Git 记录仅更改大小写的文件名修改(例如将 readme.md 改为 README.md),请在“终端”中从仓库运行 git mv,然后使用 git status 检查暂存的更改。在许多 Mac 上,默认的 APFS 格式会保留文件名大小写,但不会按大小写区分名称,因此通过访达(Finder)重命名或普通的 mv 命令可能会使 Git 无法识别出差异。Apple 指出 APFS 也可以格式化为区分大小写,因此具体行为取决于卷的格式。Apple 开发者:文件与目录

使用 git mv 重命名受跟踪的文件

在“终端”中,切换到包含该文件的仓库目录。将下面的示例路径替换为当前的准确路径和目标路径。如果名称中包含空格或 shell 元字符,将每个路径用引号引起来是一个好习惯。

git mv 'src/readme.md' 'src/README.md'
git status

Git 的 git mv 命令会重命名工作区路径并更新索引;该更改会被暂存,但仍需要提交。Git 手册要求源路径必须存在,并说明索引更新会在成功移动后发生。GitHub 文档中记载的命令行工作流同样建议在执行 git mv 后检查 git status。git-mv 文档 GitHub 文档:重命名文件

如果操作成功,请检查状态输出中是否显示了从旧路径到新路径的暂存重命名。在提交之前检查完整的暂存更改,特别是如果你同时编辑了该文件:

git diff --cached --summary
git diff --cached -- 'src/README.md'

摘要信息有助于确认路径更改;第二条命令可让你检查该路径已暂存的内容。在某些情况下,Git 可能会将重命名显示为删除和添加,因为重命名展示是从文件内容和历史记录推断出来的。此处的关键检查是确保索引包含所需的目标路径,且没有非预期的暂存更改。

如果直接仅修改大小写的重命名失败

某些不区分大小写的卷或 Git 配置不接受源路径与目标路径仅在大小写上有差异的直接移动。可以先使用拼写不同的临时名称,然后再将该临时路径移动到最终名称:

git mv 'src/readme.md' 'src/readme-case-tmp.md'
git mv 'src/readme-case-tmp.md' 'src/README.md'
git status

该临时路径不能已存在。运行完这两条命令后,确认状态仅显示预期的从旧名称到新名称的重命名,并检查暂存的差异(diff)。两步法为文件系统提供了一个可区分的中间名称,而 git mv 会在每个成功的步骤中更新 Git 的索引。如果任一命令报错,请停止操作并在重试前检查 git status 和目录;除非你已确认覆盖目标文件符合预期,否则不要添加 -f。

检查仓库的大小写处理设置

Git 的 core.ignoreCase 设置为不区分字母大小写的文件系统启用了变通方案。Git 文档说明,clone 和 init 会探测文件系统并在适当情况下设置此值;它还警告更改此值可能会导致意外行为。你可以通过以下命令检查生效的设置:git-config 文档

git config --get core.ignoreCase

如果未输出任何值,则表示该命令在生效的配置中未找到此项设置。请避免将 git config core.ignoreCase false 视为修复方法:它会改变 Git 的假设,但并不能让不区分大小写的 macOS 卷在同一目录下存储两个仅大小写不同的同名文件。文档中该设置的用途是帮助 Git 配合实际的文件系统行为工作,而不是改变该行为。

确认、提交并共享重命名

在提交之前,请在 git status 中核对最终拼写,检查暂存摘要,并确认未包含无关更改。暂存的重命名无误后,使用清晰的说明进行提交:

git commit -m "Rename readme file to uppercase"

如果你打算共享该提交,请按照仓库常规的远程和分支工作流推送该分支。重命名已记录在提交中;远程仓库只有在推送后才会收到该修改。在区分大小写的 APFS 卷上,仅大小写不同的名称可以并存为独立文件,而默认的不区分大小写配置则将它们视为同一名称。可靠的本地检查方法始终是确认 Git 的索引和暂存状态显示了预期的目标路径。Apple 支持:Mac 上“磁盘工具”中可用的文件系统格式

来源