我使用的是不区分大小写的文件系统(Windows),并且更改了几个文件的大小写(很多文件受到影响,所以我不急于再次执行此操作)。
我预计提交更改会很容易。但 git 不知道这些变化,所以我陷入困境。
我的感觉是必须有一种方法告诉 git: “查看当前存储在磁盘上的名称。完全像这样提交它们,即如果大小写与索引中的文件不同,则执行
git mv Foo foo
.”
我已经安装了
TortoiseGit
,但找不到这样的选项。我尝试设置...
core.ignorecase = true
...但这似乎没有任何区别。
谢谢, TF
您需要让 git 刷新 git 索引中的文件,但是,它不会在大小写密集的操作系统上拾取区分大小写的更改。
相反,您可以强制它更新索引
git rm -r --cached .
git add .
不要忘记下一步。
再次调查我的问题后,我得出的结论是没有解决办法。我最终编写了一个批处理脚本来使用
git mv
重命名我的文件。
恕我直言,如果 Git 即使在不区分大小写的文件系统上也能处理区分大小写的文件,那么整个不区分大小写与区分大小写的问题就不会成为问题。当然,在 Windows 或 OS X 中,你不能将文件“foo.txt”放在“Foo.TXT”旁边,但是没有理由,Git 在重命名后会任性地忽略 Windows 或 OS X 上的差异(因为这两个系统都是非常善于区分大小写)。
IIRC
core.ignorecase = true
自动设置为 true
。
如果您想重命名文件,您可以使用上下文菜单“重命名”选项(您可能需要按住 Shift 键才能看到它 - 在 TortoiseGit 选项中进行配置)以便执行
git mv
操作。
您可以将根文件夹重命名为
name_
,提交,然后改回并提交。
这是有效的,因为当您将根文件夹从
name
更改为 name_
时,它会删除 name
文件夹下的所有文件 - 小写和大写版本。
但是,这似乎会导致文件历史记录出现问题,即。 “与最新版本比较”等命令无法找到最新版本。 (因为您将它们全部重新定位到一次提交的不同路径)
您可以在这里尝试使用此实用程序:https://github.com/tawman/git-unite
(我自己还无法尝试,因为作者没有提供最终的exe文件,并且我在尝试运行构建脚本时遇到了问题。但这似乎是一个可以解决这个问题的实用程序问题更容易。)
Venryx提供的解决方案是一个很好的解决方案。 我能够按照 README.md 文件中的说明并在 UniteRepository.cs 文件的第 223 行进行一处更正后编译 Git-Unite 存储库: 将
_gitRepository?.Dispose();
更改为 _gitRepository.Dispose();
一旦获得可执行文件,只需使用以下命令应用它:
git.unite.exe [OPTIONS] [repository_folder]
。 这就像冠军一样。