git 和 Windows 在区分大小写方面存在一个非常奇怪的问题。
我不是 git 大师,但也不是初学者。只是想把它扔出去。
我面临的问题:
克隆存储库(不指定分支,只需获取远程源主机上的内容)
签出现有的开发分支(我们称之为DEV)
许多文件现在都是小写的
a.两个分支对于这些文件具有相同的大小写
b.受影响的文件似乎是两个分支之间包含内容差异的文件
c.并非所有文件都会受到影响
补充说明:
使用Windows系统(不区分大小写)
git 配置文件定义ignorecase = true
a.尝试切换为 false,并没有消除这个问题
尝试在每个分支上运行 ls-tree,两者都显示文件具有相同的大小写(并非全部小写)
切换到 Dev 分支并返回 master 时,受影响的文件名保持小写
直接克隆 Dev 分支就可以了。不会产生这些小写文件名
我已经尝试了很多方法来解决这个问题,尽管目前还没有解决方案。
有人知道这里发生了什么吗?我没有找到关于这个问题的太多支持。
这个问题看起来相关(但没有答案):
谢谢
可能有人能够准确地弄清楚发生了什么以及为什么,但是我担心大多数回答这个问题的有经验的人都会提供类似“如果疼痛,就不要这样做”的内容。
举个例子,torek 在评论中建议购买 Linux 系统。 Torek 是 stackoverflow 上最有经验的人之一,如果他们没有给你答案,那么很可能它不会来。
如果您不想使用 Linux 系统,另一种选择是将所有文件的大小写更改为相同(例如全部小写)。
出于这个原因,人们经常建议人们不要在文件名中混合大小写。 我个人更喜欢全部小写。
在 Windows 中的文件夹上启用区分大小写。 (NTFS 自 2018 年 4 月起就有此功能。)
fsutil file setCaseSensitiveInfo <folder> enable
请参阅 https://learn.microsoft.com/en-us/windows/wsl/case-sensitivity
在 git 存储库中查找 Windows 不区分大小写的重复目录路径
以管理员身份打开 Powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
(需要重启机器)
以管理员身份打开 Powershell
cd drive:\your\root\folder
(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ enable}
打开 git Bash
cd /drive/your/root/folder
find * -type d | uniq -di
可以在 Windows 上工作,无需管理权限,只需克隆 git 项目,然后在 MobaXterm(或您喜欢的 shell)中使用:
mkdir caseSensitiveSubTree
fsutil.exe file setCaseSensitiveInfo caseSensitiveSubTree
cd caseSensitiveSubTree
git clone ssh://git@gitlab/inserGitAccount/myProject.git
mv myProject ..
cd ..
rmdir caseSensitiveSubTree
cd myProject
然后就可以工作了,git在不区分大小写的文件夹中。我在 Windows 10 上测试过。