在不区分大小写的文件系统(例如 NTFS 或 APFS)上克隆包含区分大小写文件路径(例如 /README.md 和 /readme.md)的 git 存储库时,git 只会检查其中一个冲突文件。
在 macOS 中,如何列出因不区分大小写而发生冲突的所有文件?
没有内置的东西可以找到这个。 博士的评论会让你接近,可能足够接近,但可能会有点过分(尽管人们可能仍然想了解这些事情)。
例如,假设某个提交有文件:
path/TO/file1.ext
path/to/file2.ext
在您的文件系统上,只有一个path/TO
或path/to
可能存在。一旦其中一个存在,这两个文件将被放入同一个path/$to
文件夹中,其中$to
小写或大写。它们仍将是单独的文件,但将通过大小写折叠和排序和唯一破折号-c-ing 调用。
在 macOS 上,由于 Unicode 规范化,我们也可能在路径中发生冲突。Linux 认为一个名为的文件's' 'c' 'h' 'combining-umlaut' 'o' 'n'
是一个文件名,而一个名为的文件's' 'c' 'h' 'o-with-umlaut' 'n'
是另一个不同的文件名。macOS 默认文件系统会将这两个名称转换为通用形式,并声称这只是一个名称。(我不知道 Windows 对此做了什么。)适当的工具也应该考虑到这一点。
请注意,Git 会将每个文件单独存储在索引中,并且可以从文件系统存储文件中更新每个单独的索引条目,而与存储文件的路径名无关。所以我们可以让 Git 建立一个从内部名称到外部名称的映射,并让它自动处理这些情况。但这是一项相当大的任务。