我有一个TortoiseHG(2.3.2)存储库,在我的Windows7旗舰版(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机器上运行时忽略了区分大小写,但我猜我被误导了。
我是该项目的唯一开发人员,因此没有任何改变可能会让其他人搞乱。
答案 0 :(得分:4)
是的,Mercurial会忽略不区分大小写的文件系统上的文件名大小写,但它仍然需要在存储库中存储 some 大小写的文件名。
使用Mercurial 2.2-rc(有关如何在Windows中运行候选版本的说明,请参阅the wiki),您将能够运行
hg rename CV2/tom.cs cv2/tom.cs
为下次提交安排“重命名”。该文件不会在磁盘上移动 - 因为它已经在一个不区分大小写的文件系统的正确位置 - 但重命名将记录在历史记录中,新的检出将在磁盘上具有正确的大小写。
维基中有more instructions,包括caseguard extension,您可以用它来保护自己。但是,这应该主要通过Mercurial 2.2修复,与以前的版本相比,它将有更多的代码来处理案例折叠问题。