Git是否不区分大小写?

110

在我部分提交的第一个名为_Electronics,开始时使用的是大写字母,然后我将其更改为_electronics

在提交了新名称后,cygwin下的Git忽略了大小写,因此我手动更改了目标存储库中的名称。

现在它有时会将提交的_electronics部分更改为_Electronics

我做错了什么?


10
你使用的是哪个操作系统? - Keith Thompson
10
你使用的是什么文件系统? - Andrew Marshall
Windows with cygwin。我的服务器运行Ubuntu Linux。不知道文件系统,我猜是ext3或ext2 - 我的提供商配置了最小安装。 - JAkk
你不觉得很高兴Windows决定不区分大小写吗? - Cascabel
Windows不区分大小写?你确定吗? - JAkk
4
Windows 不区分大小写,但有时(现今更频繁)会保留大小写。 - Arafangion
6个回答

126

这将取决于配置值core.ignorecase,在区分大小写的文件系统中设置为false,在Windows上的msysgit中设置为true。

core.ignorecase

如果为true,则此选项启用各种解决方案,以使git能够在不区分大小写的文件系统(如FAT)上更好地工作。例如,如果目录中列出了"makefile",而git希望找到的是"Makefile",git将假定它实际上是相同的文件,并继续将其记为"Makefile"。

默认值为false,但在创建存储库时,git-clone(1)或git-init(1)将探测并设置适当的core.ignorecase true。

有关更多详细信息,请参阅更改Git中文件名大写的情况中的回复。


92
我认为这是正确的答案。如果要留给未来的自己使用,请在sudo下使用“git config --unset-all core.ignorecase && git config --system core.ignorecase false”命令。 - Markus Hedlund
2
@Znarkus 在 OS X 上,你的代码正是我所需要的。谢谢! - James Brown
3
同詹姆斯所说,@Znarkus已经找到了在OS X上解决这个问题的方法,感谢! - Craig Nakamoto
9
在MacOS中重命名一个文件时,如果只改变了大小写,Git会将重命名后的版本视为全新的文件,但并不会生成相应的“删除”旧文件的操作。因此,如果您提交并推送到 GitHub,GitHub将同时具有旧名称和新名称的文件,但是您的本地系统只会有新文件,Git也不会知情。 - ivanreese
2
@spiralganglion 对于在OSX上进行web开发,我真的可以推荐创建大小写敏感分区,然后将其挂载为您的www目录。 - Markus Hedlund
显示剩余2条评论

78

在大小写不敏感的系统上,它将被视为两个不同的事物,但会导致问题。如果是这种情况,请确保您通过制表符自动完成任何路径或文件名。此外,要仅更改大小写的名称,请执行以下操作:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

这是一种明确地进行更改、提交和折叠提交的方法。更短的方法是同时操纵索引和工作文件夹:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

这也涉及到调整目录名称:git mv and only change case of directory


看起来这是正确的(除了我正在从大写字母改为小写字母)。 - JAkk
我瞥了一眼,只要我习惯了Cygwin,使用Cygwin就更加舒适 - 感谢提示。 - JAkk
您可以直接使用 git mv file.txt File.txt 命令来重命名文件。不确定这是否是 Git 的新功能。 - Phil

24

这要简单得多:

git mv Electronics electronics -f
git commit -m "That was easy!"

4
你尝试在不区分大小写的文件系统上操作了吗? - Edward Thomson
2
我最初的理解是原帖发布者试图对文件夹进行大小写更改重命名,而不是文件。现在我重新阅读了一下,这并不清楚。确实,mv -f可以用于文件。 - Edward Thomson

24
git config --system core.ignorecase false

0

在我的情况下,我有两个文件夹testsTests,它们在Github中显示为两个单独的文件夹,但在Windows中是一个单独的Tests文件夹。我的目标是将它们合并到tests中。

我采用了以下方法:

  1. 创建一个新文件夹temp
  2. 将所有内容从Tests复制到temp
  3. 删除Tests
  4. 执行git rm Tests -r
  5. temp重命名为tests

0

我已经尝试解决这个问题,并且在Windows10上取得了成功。

假设在Bitbucket上有两个文件夹TEST和test,但是当我在磁盘上克隆仓库时,只创建了TEST文件夹,而我希望将test作为包含所有文件的单个文件夹保存在git中。

我需要在命令行上执行以下命令: git mv TEST test1 -f git mv text1 test -f git commit -m "renaming..." git push

现在你会看到在Bitbucket上文件夹层次结构已经被纠正。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接