问题描述
我在使用 GIT 时遇到了一个奇怪的问题。
我有一个用于我正在处理的小项目的 git 存储库。没有遥控器,这只是我自己的工作。直到几天前,我的开发甚至还没有保证任何分支。
我终于需要为一些实验代码创建一个分支。完成后,我只需检出 master 分支即可返回到我所在的位置。这就是问题开始的地方。
有六个文件在新分支和主分支之间发生变化。每次我切换/签出任一分支(在两个分支之间切换)时,这六个文件名中的大部分都会更改大小写。
例如,如果文件应该是 someCode.py:
不管我选择哪个分支,每次结果都不一样。以及每次最终哪个文件与哪个 CaSe 不同。
一开始我怀疑我使用的 VSCode 的 GIT 插件(GIT Graph),但它也会发生在包含的 GIT GUI 中,甚至在我从命令行使用“git switch”时也会发生。
我了解了 core.ignorecase 设置;它被设置为 True。我尝试将其设置为 False,但问题仍然存在。
有人知道发生了什么吗? 谢谢
详情:
解决方法
在本地,Git 区分大小写,因此您可以有两个不同的文件,分别命名为 filename.txt
和 FileName.txt
。在某些操作系统(例如 Linux)上运行良好,而在其他操作系统(Windows)上则不然。请注意,分支名称也是如此;您不能有两个不同的分支,仅在 Windows 上因大小写而异。这样做的原因是分支名称作为文件存储在您的驱动器上。
很可能您的问题是相关文件在两个分支上具有不同的名称,但仅因大小写而异。如果是这样,请选择您想要的(可能是 master
),然后在另一个分支上重命名这些文件以完全匹配大小写。如果它们实际上应该是不同的文件,那么更改它们的名称而不仅仅是大小写。
另一种可能是,两个(或多个)名称因大小写不同而不同的文件只存在于同一个分支中,而切换分支只会导致问题暴露出来。请注意,它可能是文件本身,也可能是这些文件路径中的任何目录也可能具有不同的大小写。要确定这是否是问题所在,请导航到 Git Bash 中存储库的根目录并运行以下命令:
git ls-tree -r HEAD | grep -i [filename-without-path]
如果您看到两个或多个名称相同但大小写不同的文件,则您已确定问题所在。
,看来我已经解决了这个问题——至少在一定程度上是这样。
我创建了一个新分支,在 Windows 资源管理器中手动修复了文件名。现在,在 master 和 newBranch 之间切换按预期执行。
但是,如果我从问题切换到 firstBranch,问题就会重新出现。该分支似乎存在问题,并且切换进和切换出该分支会导致该问题。
我仍然不知道为什么。
编辑:好吧,也许不是。 Repo 似乎在其他分支上又遇到了这个问题。