【问题标题】:当我执行 git clone 时,在不区分大小写的文件系统上出现区分大小写的路径冲突
【发布时间】:2020-12-07 14:56:12
【问题描述】:

当我 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)。

有人也看到这个问题吗?

【问题讨论】:

  • 您的文件系统可能不区分大小写,因此它无法区分这两个文件名/路径。对于您的文件系统,abcabC 必须引用完全相同的文件。以区分大小写的方式跟踪文件的 Git 警告您,您正在克隆的存储库希望将 abcabC 视为不同的文件,但您的文件系统无法表示这一点。尝试使用区分大小写的 FS。或者调查冲突文件是否实际上是为了保存不同的内容。
  • @Juan 你从来没有接受过答案。没有一个是正确的?

标签: git macos windows-10 ntfs apfs


【解决方案1】:

定义

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

问题

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

这里的问题是Useruser 不允许在不区分大小写的文件系统上的components 目录中同时共存(如果您使用的是Windows,则为NTFS 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 Central

macOS 解决方案

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

反射

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

【讨论】:

  • 不适用于 Windows
  • @SantanuBiswas 请详细说明哪些步骤不适合您。对我来说,这个答案完美解决了我在 Windows 上的问题
【解决方案2】:

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

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

更多信息:

How to Enable Case Sensitive File and Folder Names on Windows 10

Per-directory case sensitivity and WSL | Windows Command Line

【讨论】:

  • 换句话说,在管理员 PowerShell 上执行:fsutil.exe file setCaseSensitiveInfo "C:\my folder" enable
  • 我启用了这个,但是当我删除“坏”文件夹时,Windows 继续删除“好”文件夹。有没有办法让删除区分大小写?
  • @RedRidingHood 要摆脱你所处的怪圈,你必须玩一些花样。一旦你出去了,你会没事的。由于您没有提供太多细节,我只能猜测,所以“技巧”大致如下:制作好文件夹的备份副本。然后让 Windows 删除好文件夹,然后删除坏文件夹,然后将好文件夹的备份放回原处。
  • 解决方案不起作用
【解决方案3】:

在 macOS 上更改整个文件系统的过程非常耗时且有风险。可以按照here 的说明使用磁盘映像来创建具有特定区分大小写(即“日志式”)文件系统的虚拟容器:

  • 区分大小写的日志式 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> 卸载映像即可。

您可以找到更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2021-08-07
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多