Git中的大小写敏感性

117

我在使用git时遇到了问题。基本上,我将core.ignorecase设置为false,因为我想更改一些文件夹名称的大小写(由于我使用的是不区分大小写的MacOS文件系统,否则更改不会显示)。当我拉取我的数据时,我注意到现在重命名的每个文件夹都会在存储库中出现两次,既有旧名称又有新名称。我不知道该怎么做才能删除旧的文件夹,因为它们在本地不可见(我尝试将core.ignorecase重新设置为true,但没有帮助)。


1
也许你可以在一个镜像上创建一个ext3文件系统,挂载它,并引入这个区分大小写的文件系统。 - André Puel
@AndréPuel 嗯,实际上我在找一些“更容易”的东西。 :P 但还是谢谢你的建议,如果我找不到其他解决方案,我会尝试这个的。 - entropid
6个回答

146

也许有一个类似于msysgit问题中这个评论的解决方法(适用于另一个不区分大小写的操作系统:Windows)可以帮助解决问题?

我遇到了同样的问题。在Eclipse中重构了一个包名,切换到以前的版本时由于文件夹名称没有还原而出现了问题。我正在使用Windows 7,Git 1.7.0.2.msysgit.0。

我的文件夹在Windows中被重命名为“folder”,但在Git中显示为“Folder
我通过在Windows中将其重命名为“Folder”,然后运行以下命令来解决这个问题:

git mv "Folder" "Folder2"
git mv "Folder2" "folder"

请注意,自从git 2.0.1(2014年6月)以来,git mv Folder folder应该正常工作!

参见“Git:更改文件名的大小写


1
我注意到以这种方式重命名时,第二次重命名可能需要很长的时间。答案是要耐心等待;文件夹最终会被重命名,然后您可以提交它。 - NathanAldenSr
另一种获取相同结果的方法是将“Folder”重命名为“Folder2”,并进行提交,然后将“Folder2”重命名为“folder”并修订最后一次提交。 - DaniCE
@DaniCE 我刚刚编辑了答案:使用git 2.0.1应该会简单得多。 - VonC

60
在 macOS 上使用以下命令。这将更改您的 git 配置以对文件名区分大小写。

使用以下命令在macOS上实现。这会更改你的git配置,使得它对文件名区分大小写。

git config core.ignorecase false

您可以通过编辑~/.gitconfig并在其中设置core来全局设置它,例如:

[core]
    ignoreCase = false

2
我做了完全相反的事情,以使git成功地执行包含更改文件名的rebase。谢谢! - sorin
这个选项不是告诉git要区分大小写,而是使git与文件系统兼容,以防配置错误。 - Amin

24
你可以创建一个带有区分大小写文件系统的磁盘映像(最好是sparsebundle磁盘映像),并在其中检出git仓库。
下面的磁盘工具截图显示了如何创建区分大小写的磁盘映像。

Disk Utility Settings


这个问题以及其他大小写敏感性引起的谜团,有一个更好、更永久的解决方案。我制作了磁盘映像;将我的旧 Git 存储库复制到其中;从我过去存放所有 Git 存储库的位置创建了一个符号链接,指向新的稀疏捆绑版本。回到正常的工作流程,再也不会遇到这个问题了。 - jwd630
1
以这种方式创建的磁盘非常非常慢。 - Minqi Pan
1
@MinqiPan,我也有同样的担忧,但如果你创建一个APFS卷,就不应该有这个问题了。APFS卷可以存在于同一“容器”分区中,因此没有性能惩罚。 - Victor Sergienko

13

默认情况下,Mac OS X 是“不区分大小写但保留大小写”的。这是一个重要的区别。

我建议您创建另一个磁盘映像,并将其格式化为“HFS 区分大小写”。


谢谢你的提示,但是上面的帖子已经解决了一切! - entropid
8
很不幸,许多糟糕的软件(当然包括Adobe)都依赖于默认的有问题的OSX文件系统。请小心。 - Jim Stewart

7
git mv "Folder" "Folder2"
git mv "Folder2" "folder"
git commit -a -m "my message"

是的,你必须继续提交它。++ - RubberDuck

2

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