当前位置:  开发笔记 > 运维 > 正文

Mercurial中不区分大小写的文件名处理

如何解决《Mercurial中不区分大小写的文件名处理》经验,为你挑选了2个好方法。

我在Vista64上使用TortoiseHg 0.5(包括Mercurial 1.0.2).我从中了解到 Mercurial Book的是,Mercurial应该在不区分大小写的文件系统上以不区分大小写的方式处理文件名(例如NTFS,这就是我所使用的).但是我发现我的Mercurial安装实际上对案例很敏感:

>hg status -A foo
C foo
>hg status -A FOO
? FOO

这可能是Mercurial中的一个错误,这是Mercurial的TortoiseHg构建中的一个错误,还是别的什么?如何从Windows上的Mercurial实现不区分大小写的文件名处理?



1> Mentat..:

此问题已在Mercurial 1.1中得到解决!从发行说明:"在案例折叠文件系统面前提高了正确性".

在Windows上,Mercurial现在忽略其命令行参数中的大小写:

>hg status -A foo
C foo
>hg status -A FOO
C foo

而且它也知道只涉及大小写的文件名更改不是新文件:

>ren foo FOO
>hg status -A fOO
C foo

因此,不再存在由于命令行上的错误而忽略更改的风险.

但是,请注意.hgignore文件的内容仍区分大小写.只有在使用glob语法时才会出现问题.使用regexp语法,您可以将(?i)放在模式的开头,使它们不敏感.



2> Ry4an Brase..:

我觉得你误读了hgbook.第7.7节的介绍只是描述操作系统中存在的三种不同类型的区分大小写,而不是说mercurial将反映这些语义.

后来在第7.7.2节"检测案件冲突"中,它说:

在工作目录中操作时,Mercurial遵循工作目录所在的文件系统的命名策略.如果文件系统保留大小写但不敏感,Mercurial会将仅在大小写不同的名称视为相同.

当你执行hg status -A FOOmercurial中发生的过程时:

    检查文件系统上是否存在与文件参数'FOO'匹配的文件,此时它是不区分大小写的,因此它找到'foo'并说"是的,我有一个文件"

    检查文件清单中是否有与文件参数"FOO"匹配的条目,并且没有,因此状态显示"?" 说它是磁盘上的文件,hg没有跟踪

为了更好地看到mercurial不关心NTFS上的案例,请尝试以下步骤:

    hg init

    回声线> Foo

    hg添加Foo

    hg commit -m'委托Foo'

    移动Foo not-foo

    移动not-foo FOO

    hg状态

你应该看到hg说没有任何改变,因为唯一改变的是hg忽略你的情况.

当我在linux上做同样的事情时,我会看到:

! Foo
? FOO

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有