Git 区分大小写

Posted

技术标签:

【中文标题】Git 区分大小写【英文标题】:Case sensitivity in Git 【发布时间】:2012-02-12 19:54:36 【问题描述】:

我遇到了 git 的问题。基本上我设置为 false core.ignorecase 因为我想更改某些文件夹名称的大小写(因为我在 OSX 下使用不区分大小写的文件系统,因此未显示更改)。当我提取数据时,我注意到现在每个重命名的文件夹在存储库中出现了两次,旧名称和新名称都有。我不知道如何删除旧文件夹,因为它们没有出现在本地(我尝试再次将 core.ignorecase 设置为 true,但没有帮助)。

【问题讨论】:

也许你可以在一个镜像上创建一个 ext3 文件系统,挂载它,然后拉入这个区分大小写的文件系统。 @AndréPuel 好吧,实际上我在寻找“更简单”的东西。 :P 但是感谢您的建议,如果我找不到其他解决方案,我会去的。 【参考方案1】:

可能是类似于this comment in an msysgit issue 的解决方法(对于另一个不区分大小写的操作系统: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: Changing capitalization of filenames”

【讨论】:

我注意到以这种方式重命名时,第二次重命名可能需要 looooong 时间。答案是要有耐心;该文件夹最终将重命名,然后您可以提交它。 另一种方法是将“Folder”重命名为“Folder2”并进行提交,然后将“Folder2”重命名为“folder”并修改最后一次提交。 @DaniCE 我刚刚编辑了答案:使用 git 2.0.1 这应该更简单。【参考方案2】:

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

git config core.ignorecase false

您可以通过编辑~/.gitconfig并将其设置在core下进行全局设置,例如:

[core]
    ignoreCase = false

【讨论】:

我做了完全相反的事情,以使 git 成功执行包含案例重命名的变基。谢谢!【参考方案3】:

您可以使用区分大小写的文件系统创建磁盘映像(最好是 sparsebundle 磁盘映像),并在那里签出您的 git 存储库。

下面的磁盘工具屏幕截图显示了如何创建区分大小写的磁盘映像。

【讨论】:

对这个问题和其他因区分大小写而产生的谜团的更好、永久的解决方案。我制作了磁盘映像;将我的旧 Git 存储库复制到其中;从我用来保存所有 git 存储库的地方创建了一个符号链接到新的稀疏捆绑版本。恢复正常的工作流程,再也不会遇到这种情况了。 这样创建的磁盘非常非常慢。 @MinqiPan,我也有同样的担忧,但如果您创建 APFS 卷,则不应该如此。 APFS volumes can exist in the same "container" partition,因此没有性能损失。【参考方案4】:

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

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

【讨论】:

感谢您的提示,但上面的帖子解决了一切! 不幸的是,很多糟糕的软件(当然是 Adob​​e)依赖于默认的损坏的 OSX 文件系统。小心点。【参考方案5】:
git mv "Folder" "Folder2"
git mv "Folder2" "folder"
git commit -a -m "my message"

【讨论】:

是的。你必须继续并提交它。 ++【参考方案6】:

在 git@vger.kernel.org 讨论论坛上有一个名为 Bug? Git checkout fails with a wrong error message 的关于区分大小写问题的较长帖子,其中突出了不同平台之间区分大小写的问题和尝试的方法。

【讨论】:

以上是关于Git 区分大小写的主要内容,如果未能解决你的问题,请参考以下文章

Git 区分大小写

git 不区分大小写

Git - 文件名忽略大小写

sh 如何在Git中仅提交区分大小写的文件名更改?

Git-大小写敏感问题

如何配置Git支持大小写敏感和修改文件名中大小写字母