Git 远程repo文件名的大小写不同于本地文件名,但未看到任何更改

Git 远程repo文件名的大小写不同于本地文件名,但未看到任何更改,git,gitlab,case-sensitive,Git,Gitlab,Case Sensitive,当我浏览到包含gitlab中特定文件的目录时,我会看到TimeHhMM.cs(第二个字母大写为“M”) 但在我的本地回购协议中,文件是TimeHhMm.cs(第二个小写字母为“m”) 奇怪的是,git并不认为这是一个值得进行提交的更改。不过,偶尔也会出现一些奇怪的情况,表明存在问题。我只是从原始的repo重新开始,通过一个远程指向本地文件系统,从旧的本地repo引入分支git status然后显示TimeHhMM.cs已删除,但未添加TimeHhMM.cs。当我放弃删除并将文件重命名为适当的Ti

当我浏览到包含gitlab中特定文件的目录时,我会看到
TimeHhMM.cs
(第二个字母大写为“M”)

但在我的本地回购协议中,文件是
TimeHhMm.cs
(第二个小写字母为“m”)

奇怪的是,git并不认为这是一个值得进行提交的更改。不过,偶尔也会出现一些奇怪的情况,表明存在问题。我只是从原始的repo重新开始,通过一个远程指向本地文件系统,从旧的本地repo引入分支
git status
然后显示
TimeHhMM.cs
已删除,但未添加
TimeHhMM.cs
。当我放弃删除并将文件重命名为适当的
TimeHhMm.cs
时,git认为提交没有什么区别

真奇怪。为什么一方面它会检测到文件已被删除(区分大小写),但一旦我将其带回并重命名,它就无法检测到小写为“m”的“新”文件


我可以通过删除文件,然后在两个单独的提交中重新添加它来修复此问题,但似乎应该有某种方法可以使此操作在一个提交中发生。有吗?

行为由
core.ignoreCase
变量控制。引述:

如果
true
,此选项将启用各种变通方法,使Git能够更好地在不区分大小写的文件系统(如FAT)上工作。对于 例如,如果一个目录列表在Git期望的时间内找到
“makefile”
“Makefile”
,Git将假定它实际上是同一个文件,然后继续 将其记为
“Makefile”

默认值为
false
除非
git clone
git init
将在创建存储库时探测并设置
core.ignoreCase true

可能就是这样。您始终可以使用以下命令将其重置为
false

git config core.ignorecase false

这(相当古老)揭示了探测是如何进行的:

就我从代码中所能看出的(我显然只看简单的代码) 香草git和
msysgit
可能对此部分有一些补丁,我不知道。 哦,顺便说一下,你没有说你在抱怨哪个版本, 或者),我们在所有系统上进行探测(包括具有 首先创建
.git/config
,然后 检查我们知道从未创建过的文件
.git/CoNfIg
是否可以 访问。如果我们可以,这意味着文件系统忽略大小写 不能同时有两个文件
config
config
,并设置
core.ignorecase
为true


你是从哪个系统做这件事的?也就是说,您是否使用区分大小写的文件系统?或者core.ignorecase恰好设置为true?(使用git config core.ignorecase进行测试)。是的,这就解决了问题。
core.ignorecase=true
是设置默认值还是什么?这似乎是荒谬的。我从本地配置中删除了此设置,并将
core.ignorecase=false
添加到全局配置中。git如何确定它是否“在创建存储库时合适”?更新了答案并提供了详细信息。)