【问题标题】:Strange case-sensitive directory name behaviour in Mercurial / TortoiseHG on Windows7Windows7 上 Mercurial / TortoiseHG 中奇怪的区分大小写的目录名称行为
【发布时间】:2012-04-26 18:14:06
【问题描述】:

我有一个 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 机器上运行时忽略了区分大小写,但我想我被误导了。

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

【问题讨论】:

    标签: visual-studio-2010 mercurial tortoisehg visualhg


    【解决方案1】:

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

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

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

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

    wiki 中有more instructions,包括一个caseguard extension,您可以在未来使用它来保护自己。不过,这个问题大部分应该在 Mercurial 2.2 中得到解决,与以前的版本相比,它将有更多的代码来处理折叠问题。

    【讨论】:

    • 谢谢,谢谢,谢谢——太完美了!一旦我将已提交为 CV2 的 5 个文件重命名为 cv2,通过 Visual Studio 添加的文件也自动更改为 cv2。 TortoiseHG 目前在 Mercurial 2.1.2 下运行,因此在我获得不区分大小写的代码之前,必须等待它们达到 2.2。再次感谢您!
    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2016-05-15
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多