10

我正在做一个git rebase,我被卡住了,因为在一个提交中我有一个名为 的文件夹Proto,但在另一个提交中我有一个名为proto. 这是一个诚实的错误,Proto在这两种情况下都应该如此。我能想到的最好的办法是尝试从两个提交中删除该文件夹,然后再次尝试变基,但必须有更好的方法。

过去,当我遇到文件大小写问题时,我使用过 git mv,但是使用文件夹它不会让我运行 git mv,我不知道为什么。

在 Windows 上修复 git 中的文件夹大写问题的正确方法是什么?

4

4 回答 4

18

当大量文件移动到不同的目录时,我们在 Windows 上的 git 存储库中遇到了类似的问题。

我第一次手动修复了我们的问题,方法是将存储库克隆到 Linux VM 并使用git mv命令运行 bash 脚本来修复文件路径问题。这是一个痛苦的过程,所以我决定开发一个工具来自动化这个过程。

Git Unite是我使用libgit2sharp库编写的一个 .NET 控制台应用程序。该程序识别所有 git 索引条目,其文件路径大小写与 Windows 文件系统报告的不同。

我在Git Unite - Fix Case Sensitive File Paths on Windows 上写了一篇博文,详细介绍了工具、用法和背后的历史

于 2013-01-14T21:02:37.573 回答
1

将文件夹重命名到 Git 历史记录中很困难,因为不跟踪文件夹——只跟踪文件夹中的文件。假设您想重命名oldFolderoldfolder您可以尝试以下操作:

  1. 从您第一次在oldFolder. 编辑将文件添加到此文件夹的每个提交。当交互式变基停止时,创建newFolder并执行git mv oldFolder/* newFolder/. 为交互式变基的每次停止执行后者。

  2. 显然,您不能在 Windows 中拥有oldFolder并且newFolder是同一个单词的两个不同大写版本。因此,重复步骤 1 以重命名newFolderoldfolder.

于 2012-12-11T20:40:17.123 回答
0

git config --global core.ignorecase true应该可以解决您在 Windows 上的问题。

于 2012-12-11T20:38:34.390 回答
0

[已编辑]我怀疑您需要将文件夹中的每个文件“git mv”到一个临时名称,如“ProtoX”,然后将临时命名的文件“git mv”到“Proto”,因为 Git 不会自行跟踪文件夹 - - 仅文件夹中的文件。

双“git mv”适用于 Windows 不区分大小写的文件系统。(您应该能够在区分大小写的文件系统(如 Linux)上直接从 'proto' 移动到 'Proto'。)

于 2012-12-11T20:40:23.237 回答