当我用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)。
有人也看到这个问题吗?
4条答案
按热度按时间mwg9r5ms1#
定义
*区分大小写文件系统:将
john.jpg
和JOHN.jpg
视为 * 两个不同的文件 *,这是允许的。*不区分大小写文件系统:将
john.jpg
和JOHN.jpg
视为 * 同一个文件 *,不允许。问题
这里的问题是,
User
和user
不允许在不区分大小写的文件系统(如果您使用的是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的计算机上创建的存储库,也许它是由其他人创建的,而不是你个人。这里的教训是要始终与您命名事物的方式保持一致,这适用于参与项目的每个人。这是一个例子,否则会发生什么。
ioekq8ef2#
在macOS上更改整个文件系统的过程非常耗时且有风险。可以使用磁盘映像(如here所述)来创建具有特定大小写敏感(即“日志”)文件系统的虚拟容器:
如果你喜欢使用终端:
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。
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
8fq7wneg4#
我对这个问题的解决方案(在Windows上)是:
1.复制文件并将其保存在存储库之外。
1.删除存储库中的文件。这会在git状态中显示两个文件都已删除。
1.提交删除并推送
1.将文件重新添加到存储库,提交并推送
在此之后,我的repo显示为最新的,没有任何提交。