如何合并 Windows 中两个大小写不同的 git 目录?

How can I consolidate two case-different git directories in Windows?

在最近的代码清理中,我设法将一些文件移动到一个与现有目录不同的目录中。

签出存储库后,我看到所有文件都以大写版本签出。但是,如果我现在尝试重命名小写目录中的其中一个文件,我将无法这样做,因为 TortoiseGit 抱怨该文件不存在。

如何将小写目录中的所有文件移动到大写目录以更正问题?

编辑 - 问题的快速说明...

我的回购看起来像这样:

\software
    \unit_tests
        \file1.h
        \file1.cpp
    \UNIT_TESTS
        \file2.h
        \file2.cpp

在 Windows 中,我在检查存储库时看到了这个:

\software
    \UNIT_TESTS
        \file1.h
        \file1.cpp
        \file2.h
        \file2.cpp

如果我现在尝试将 file1.h 移动到其他地方,我会收到一条错误消息,指出它不受版本控制。

If I now try and move file1.h somewhere else I get an error stating that it's not under version control.

在使用 Git 命令时,您必须确保使用正确的大小写(即 Git 知道的大小写)。虽然 Windows 文件系统不区分大小写,但 Git 不区分大小写,因此您应该在那里使用正确的路径。

因此,虽然 Windows 看到同一目录中的文件,但您仍有以下路径为 Git 所知:

software\unit_tests\file1.h
software\unit_tests\file1.cpp
software\UNIT_TESTS\file2.h
software\UNIT_TESTS\file2.cpp

因此,为了移动这些文件,您必须准确使用这些路径。你可能想在两者之间使用一个临时位置,这样 Windows 将在你在 Git 中执行移动时正确处理它,例如:

git mv software\unit_tests\file1.h software\unit_tests2\file1.h
git mv software\unit_tests2\file1.h software\UNIT_TESTS\file1.h

或者,您也可以跳过物理移动,直接从 unit_tests 目录中删除文件并将它们添加到 UNIT_TESTS 中:

git rm --cached software\unit_tests\file1.h
git add software\UNIT_TESTS\file1.h