首页 > 解决方案 > 切换 GIT 分支随机更改文件名大小写

问题描述

我对 GIT 有一个奇怪的问题。

我有一个我正在从事的小项目的 git repo。没有遥控器,这只是为了我自己的工作。直到几天前,我的开发甚至还没有保证任何分支。

我终于需要为一些实验代码创建一个分支。完成后,我只需签出 master 分支以返回我所在的位置。这就是问题开始的地方。

有六个文件在新分支和主分支之间发生变化。每次我切换/签出任一分支(在两者之间切换)时,这六个文件名中的大多数都会更改大小写。

例如,如果文件应该是someCode.py

我选择哪个分支都没有关系,每次结果都不一样。哪些文件最终与哪个 CaSe 每次都不同。

我怀疑我最初使用的 VSCode 的 GIT 插件(GIT Graph),但它也发生在包含的 GIT GUI 中,甚至如果我从命令行使用“git switch”也会发生。

我读到了core.ignorecase设置;它被设置为真。我尝试将其设置为 False 并且问题仍然存在。

有谁知道发生了什么?谢谢

细节:

标签: windowsgitvisual-studio-codegit-gui

解决方案


Git 本身是区分大小写的,因此您可以有两个不同的文件,分别命名为filename.txtFileName.txt. 在某些操作系统(例如 Linux)上运行良好,而在其他操作系统(例如 Windows)上则不行。请注意,分支名称也是如此;你不能有两个不同的分支,仅在 Windows 上因大小写而异。原因是分支名称作为文件存储在您的驱动器上。

您的问题很可能是有问题的文件在两个分支上具有不同的名称,但仅因大小写而异。如果是这样,请选择您想要的(也许master),然后在另一个分支上重命名这些文件以完全匹配大小写。如果它们实际上应该是不同的文件,那么不仅仅是通过大小写来更改它们的名称。

另一种可能性是两个(或多个)名称因大小写而异的文件仅存在于同一个分支中,切换分支只会导致问题暴露。请注意,它可能是文件本身,也可能是这些文件路径中的任何目录也可能有不同的大小写。要确定这是否是问题所在,请在 Git Bash 中导航到存储库的根目录并运行以下命令:

git ls-tree -r HEAD | grep -i [filename-without-path]

如果您看到两个或多个具有相同名称但大小写不同的文件,则您已经确定了问题。


推荐阅读