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

3
在最近的代码清理中,我设法将一些文件移动到一个目录中,该目录与现有目录仅在大小写上不同。
检出代码库后,我看到所有文件都以大写字母版本检出。但是,如果我现在尝试重命名小写目录中的其中一个文件,则无法这样做,因为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移动到其他地方,我会收到一个错误提示,指出它不在版本控制下。

那么,你的问题是如何将名为“_folder_” 的文件夹重命名为“_folDer_”? - CristiFati
添加一个示例。我想合并这两个到unit_tests - 全部使用小写以避免将来出现任何问题。 - Jon Cage
谢谢。 在文件名方面,Windows 不区分大小写,因此它将您的文件夹合并为一个。恐怕除非有一种直接在 repo 上工作的方法(不涉及 Windows FS),否则您无法在 Windows 上执行此操作(我不是 git 专家)。 如果您无法找到 Unix 机器来完成这项工作,可以尝试使用 [Cygwin](https://www.cygwin.com/)作为解决方法。 - CristiFati
1个回答

4

如果我现在尝试将file1.h移动到其他地方,就会出现错误提示说它不在版本控制之下。

在使用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

所以为了移动这些文件,你必须精确地使用这些路径。而且你可能想要在中间使用一个临时位置,这样当你在 Git 中执行移动操作时,Windows 会正确处理它,例如:

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

移除并重新添加是否会保留历史记录(即将其标记为移动)? - Jon Cage
1
Git 在技术上并没有记录文件移动,当你执行 git mv 时,实际上是将 rmadd 结合在一起。移动的识别只是在前端完成的,所以效果是相同的。 - poke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接