2

我有一个 TortoiseHG (2.3.2) 存储库,在我的 Windows7 Ultimate(32 位)机器上包含一个名为“cv2”的根目录。当我在“cv2”的不同子目录中添加新文件时,TortoiseHG 将“cv2”显示为“cv2”或“CV2”,具体取决于目录。

例如,如果我将一个名为“tom.cs”的文件添加到以下目录,我会在 TortoiseHG 中得到以下结果:

Physical Directory                 TortoiseHG Filename
...\cv2\Common\tom.cs              cv2/Common/tom.cs
...\cv2\tom.cs                     CV2/tom.cs
...\cv2\WinClient\tom.cs           cv2/WinClient/tom.cs
...\cv2\WinService\tom.cs          CV2/WinService/tom.cs

我不知道这是什么时候开始的,但这意味着我现在已经提交到“cv2”和“CV2”,导致存储库中有两个单独的目录(我猜我对此无能为力)。

存储库包含一个解决方案,在子目录中有 3 个项目(“cv2”是其中之一,还有“cp2”和“NotificationService”)。我刚刚发现解决方案文件的目录名称是“CV2”而不是“cv2”。现在已经改变了,因为它阻止了“Diff”在 Visual Studio 中的工作......但是从一开始就是这样,并且自初始提交以来就没有改变。不幸的是,我不记得当时我是否重命名了 Windows 目录……我可能有。

对于“CV2”或“cv2”这取决于它是哪个目录的差异,我有什么办法吗?我尝试通过命令提示符重命名 Windows 目录但没有成功。我的印象是 Mercurial 在 Windows 机器上运行时忽略了区分大小写,但我想我被误导了。

我是该项目中唯一的开发人员,因此不会有任何更改弄乱其他任何人的危险。

4

1 回答 1

4

是的,Mercurial 在不区分大小写的文件系统上会忽略文件名大小写,但它仍然必须在存储库中存储带有某些大小写的文件名。

使用 Mercurial 2.2-rc(有关如何在 Windows 中运行候选版本的说明,请参阅wiki),您将能够运行

hg rename CV2/tom.cs cv2/tom.cs

为下一次提交安排“重命名”。该文件不会在磁盘上移动——因为它已经在不区分大小写的文件系统的正确位置——但重命名将记录在历史记录中,并且新的签出将在磁盘上具有正确的大小写。

wiki 中有更多说明,包括您将来可以用来保护自己的caseguard 扩展。然而,这主要应该通过 Mercurial 2.2 来解决,与以前的版本相比,它将有更多的代码来处理案例折叠问题。

于 2012-04-26T18:32:54.523 回答