当我执行 git clone 时不区分大小写的文件系统上的区分大小写路径冲突

Jua*_*uan 12 git macos ntfs windows-10 apfs

当我 git clone 存储库时,会出现以下警告:

...
warning: the following paths have collided (e.g. case-sensitive paths
on a case-insensitive filesystem) and only one from the same
colliding group is in the working tree:

  'components/User/index.js'
  'components/user/index.js'
Run Code Online (Sandbox Code Playgroud)

我一直在阅读,这可能是 Windows 问题,因为文件夹路径中未启用区分大小写。我也尝试过,git config --global core.ignorecase false但它一直失败。

所有不区分大小写的文件系统都面临这个问题,即 Windows 10(NTFS) 和 macOS(APFS)。

有没有人也看到这个问题?

Sam*_*mir 10

定义

  • 区分大小写的文件系统:将john.jpgJOHN.jpg视为两个不同的文件,这是允许的。
  • 不区分大小写的文件系统:治疗john.jpgJOHN.jpg作为一个相同的文件,其容许。

问题

'components/User/index.js'
'components/user/index.js'
Run Code Online (Sandbox Code Playgroud)

这里的问题是,Useruser不准并存的内部,同时components在不区分大小写的文件系统目录(这是NTFS,如果你使用的是Windows 10)。

windows操作系统解决方案

如果您最近克隆了 repo 并且尚未对其进行任何工作,我建议您重新开始。因此,删除克隆,然后为要克隆存储库的目录启用区分大小写,然后重新克隆它。在克隆过程之前执行此操作的好处是,由 git 作为克隆过程的一部分创建的所有目录都将区分大小写,并且 git 将不再发出此警告。另外,它使您能够清理混乱。

  1. 以管理员身份打开命令提示符。
  2. 转到您打算克隆存储库的目录。在这个例子中,我将使用C:\Users\Juan\Desktop. 你不必cd到这个目录做下一步,只要知道你的目标目录是什么。
  3. 为目标目录启用区分大小写。命令:fsutil.exe file SetCaseSensitiveInfo "C:\Users\Juan\Desktop" enable
  4. 克隆你的回购。在这个例子中,我将使用https://github.com/torvalds/linux.git. 命令:git clone https://github.com/torvalds/linux.git
  5. (可选):删除或重命名冲突的文件和文件夹(如果它们相同)。您需要通过比较它们来验证这一点。要删除、使用git rm以及移动或复制,请使用git mv
  6. (可选):如果您有写权限(并且可能在与团队其他成员讨论问题之后),提交并将您的更改推送到上游存储库。
  7. (可选):禁用区分大小写。命令:fsutil.exe file SetCaseSensitiveInfo "C:\Users\Juan\Desktop" disable

现在您可以重新开始处理该项目。

来源:Windows 中心

macOS 解决方案

在 macOS 上,您必须将卷重新格式化为不区分大小写/敏感或完全创建一个新卷。细节

反射

您可能遇到这个问题是因为您克隆了在运行 Linux 或 Mac 的计算机上创建的存储库,也许它是由其他人而不是您个人创建的。这里的教训是始终与您命名事物的方式保持一致,这适用于参与项目的每个人。这是否则可能发生的情况的一个例子。


Foa*_*oad 5

在 macOS 上更改整个文件系统的过程非常耗时且风险很大。人们可以利用此处解释的磁盘映像来创建具有特定区分大小写(即“日志式”)文件系统的虚拟容器:

  • 区分大小写的日记式 HFS+ - Mac OS 扩展(区分大小写,日记式)
  • 日志式 HFS+ - Mac OS 扩展(日志式)

如果喜欢使用终端:

  • 使用创建图像hdiutil create -type SPARSE -fs 'Case-sensitive APFS' -volname <volumeName> <fileName>
  • 该命令将安装您可以进入hdiutil attach <fileName>.sparseimage的映像。/Volumes/<volumeName>cd
  • 完成后,只需使用 卸载映像即可diskutil unmount /Volumes/<volumeName>

您可以在这里找到更多信息。


vas*_*vas 3

使用 Windows 10 的功能在每个目录的基础上启用区分大小写。

此外,适用于 Linux 的 Windows 子系统允许您区分大小写地挂载 Windows 文件夹。

了解更多信息:

如何在 Windows 10 上启用区分大小写的文件和文件夹名称

每个目录区分大小写和 WSL | Windows 命令行

  • 换句话说,在管理员 PowerShell 上执行:`fsutil.exe file setCaseSensitiveInfo "C:\myfolder"enable` (2认同)