21

当我 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'

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

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

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

4

3 回答 3

16

定义

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

问题

'components/User/index.js'
'components/user/index.js'

这里的问题是,User不允许usercomponents不区分大小写的文件系统(如果您使用的是 Windows 10 ,则为NTFS )上的目录中同时共存。

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 的计算机上创建的存储库,它可能是由其他人创建的,而不是您个人创建的。这里的教训是始终与您命名事物的方式保持一致,这适用于参与项目的每个人。这是其他情况下可能发生的事情的一个例子。

于 2020-10-21T14:56:34.857 回答
2

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

此外,适用于 Linux 的 Windows 子系统让您可以将 Windows 文件夹安装为区分大小写。

了解更多信息:

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

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

于 2020-08-19T15:40:51.547 回答
0

在 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>.

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

于 2021-12-18T07:58:46.590 回答