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

yvfmudvl  于 2023-05-27  发布在  Git
关注(0)|答案(4)|浏览(429)

当我用git克隆仓库时,会出现以下警告:

...
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)。
有人也看到这个问题吗?

mwg9r5ms

mwg9r5ms1#

定义

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

问题

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

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

windows操作系统解决方案

如果您最近克隆了repo,并且还没有对它进行任何工作,我建议您重新开始。因此,删除克隆,然后为您打算克隆存储库的目录启用大小写敏感,然后重新克隆它。在克隆过程之前这样做的好处是,作为克隆过程的一部分由git创建的所有目录都将区分大小写,并且git将不再给予此警告。另外,它还能让你收拾残局。
1.以管理员身份打开命令提示符。
1.转到要克隆存储库的目录。在这个例子中,我将使用C:\Users\Juan\Desktop。你不必cd到这个目录来做下一步,只需要知道你的目标目录是什么。
1.为目标目录启用区分大小写。命令:fsutil.exe file SetCaseSensitiveInfo "C:\Users\Juan\Desktop" enable
1.克隆你的回购。在这个例子中,我将使用https://github.com/torvalds/linux.git。命令:git clone https://github.com/torvalds/linux.git
1.(可选):删除或重命名冲突的文件和文件夹(如果它们相同)。您需要通过比较来验证这一点。要删除,使用git rm;要移动或复制,使用git mv
1.(可选):如果你有写权限,提交并将你的更改推到上游仓库(可能是在与团队的其他成员讨论了问题之后)。
1.(可选):禁用区分大小写。命令:fsutil.exe file SetCaseSensitiveInfo "C:\Users\Juan\Desktop" disable
现在你可以回去做项目了。
来源:Windows Central

macOS解决方案

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

反射

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

ioekq8ef

ioekq8ef2#

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

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

如果你喜欢使用终端:

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

您可以找到更多信息here

bvn4nwqk

bvn4nwqk3#

使用Windows 10的功能来启用按目录区分大小写
此外,Windows Subsystem for Linux允许您将Windows文件夹装入为区分大小写。
更多信息:
How to Enable Case Sensitive File and Folder Names on Windows 10
Per-directory case sensitivity and WSL | Windows Command Line

8fq7wneg

8fq7wneg4#

我对这个问题的解决方案(在Windows上)是:
1.复制文件并将其保存在存储库之外。
1.删除存储库中的文件。这会在git状态中显示两个文件都已删除。
1.提交删除并推送
1.将文件重新添加到存储库,提交并推送
在此之后,我的repo显示为最新的,没有任何提交。

相关问题