在不区分大小写的文件系统上自动进行区分大小写重命名的 git 提交

问题描述 投票:0回答:6

我使用的是不区分大小写的文件系统(Windows),并且更改了几个文件的大小写(很多文件受到影响,所以我不急于再次执行此操作)。

我预计提交更改会很容易。但 git 不知道这些变化,所以我陷入困境。

我的感觉是必须有一种方法告诉 git: “查看当前存储在磁盘上的名称。完全像这样提交它们,即如果大小写与索引中的文件不同,则执行

git mv Foo foo
.”

我已经安装了

TortoiseGit
,但找不到这样的选项。我尝试设置...

core.ignorecase = true

...但这似乎没有任何区别。

谢谢, TF

git tortoisegit
6个回答
4
投票

您需要让 git 刷新 git 索引中的文件,但是,它不会在大小写密集的操作系统上拾取区分大小写的更改。

相反,您可以强制它更新索引

git rm -r --cached . 
git add .

不要忘记下一步。

来源


2
投票

再次调查我的问题后,我得出的结论是没有解决办法。我最终编写了一个批处理脚本来使用

git mv
重命名我的文件。

恕我直言,如果 Git 即使在不区分大小写的文件系统上也能处理区分大小写的文件,那么整个不区分大小写与区分大小写的问题就不会成为问题。当然,在 Windows 或 OS X 中,你不能将文件“foo.txt”放在“Foo.TXT”旁边,但是没有理由,Git 在重命名后会任性地忽略 Windows 或 OS X 上的差异(因为这两个系统都是非常善于区分大小写)。


1
投票
在 Windows 上创建/克隆的 git 存储库上,

IIRC

core.ignorecase = true
自动设置为
true

如果您想重命名文件,您可以使用上下文菜单“重命名”选项(您可能需要按住 Shift 键才能看到它 - 在 TortoiseGit 选项中进行配置)以便执行

git mv
操作。


0
投票

您可以将根文件夹重命名为

name_
,提交,然后改回并提交。

这是有效的,因为当您将根文件夹从

name
更改为
name_
时,它会删除
name
文件夹下的所有文件 - 小写和大写版本。

但是,这似乎会导致文件历史记录出现问题,即。 “与最新版本比较”等命令无法找到最新版本。 (因为您将它们全部重新定位到一次提交的不同路径)


0
投票

您可以在这里尝试使用此实用程序:https://github.com/tawman/git-unite

(我自己还无法尝试,因为作者没有提供最终的exe文件,并且我在尝试运行构建脚本时遇到了问题。但这似乎是一个可以解决这个问题的实用程序问题更容易。)


0
投票

Venryx提供的解决方案是一个很好的解决方案。 我能够按照 README.md 文件中的说明并在 UniteRepository.cs 文件的第 223 行进行一处更正后编译 Git-Unite 存储库: 将

_gitRepository?.Dispose();
更改为
_gitRepository.Dispose();

一旦获得可执行文件,只需使用以下命令应用它:

git.unite.exe [OPTIONS] [repository_folder]
。 这就像冠军一样。

© www.soinside.com 2019 - 2024. All rights reserved.