Git 远程repo文件名的大小写不同于本地文件名,但未看到任何更改
当我浏览到包含gitlab中特定文件的目录时,我会看到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
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如何确定它是否“在创建存储库时合适”?更新了答案并提供了详细信息。)