Mercurial .hgignore沮丧

时间:2012-07-03 01:03:11

标签: regex mercurial hgignore

我有一个RE检查器,说这应该有效。我做错了什么?!?

我想忽略的例子:

apps/cms/templates/cms/test_bup_DEPRECATED/widgets/page_link.html

我的.hgignore文件:

syntax: regexp
^static
.*_DEPRECATED.*

我尝试过各种各样的事情并没有成功:(

另一次尝试失败:

syntax: glob
_DEPRECATED/*

更新: 我将.hgignore文件编辑为:

syntax: glob
**_DEPRECATED/**

但是hg st仍在这样做:

$ hg st | grep DEPR
A apps/cms/templates/cms/test_DEPRECATED/base.html

相同的结果:

syntax: glob
_DEPRECATED

3 个答案:

答案 0 :(得分:8)

首先,.hgignore不会忽略Mercurial已经跟踪过的文件。您的示例表明该文件已被跟踪:

$ hg st | grep DEPR
A apps/cms/templates/cms/test_DEPRECATED/base.html

该文件已添加,但尚未提交。使用hg forget忘记文件,然后忽略模式将生效。

.hgignore模式匹配路径的任何部分,因此这就是您所需要的:

syntax: regexp
_DEPRECATED/

请注意,您可能需要目录的尾部斜杠,或者它也会匹配以_DEPRECATED结尾的文件,否则请将其删除。

要计算忽略模式,TortoiseHg(thg ignore)中的忽略GUI非常有用。它显示所有未跟踪且未被忽略的文件,并且可以输入模式,直到忽略正确的文件。

答案 1 :(得分:1)

正确答案:

syntax: glob
**_DEPRECATED/**

示例:

$ cat .hgignore 
syntax: glob
**_DEPRECATED/**
$ find . | fgrep -v /.hg/
.
./.hgignore
./apps
./apps/cms
./apps/cms/templates
./apps/cms/templates/cms
./apps/cms/templates/cms/file
./apps/cms/templates/cms/test_bup_DEPRECATED
./apps/cms/templates/cms/test_bup_DEPRECATED/widgets
./apps/cms/templates/cms/test_bup_DEPRECATED/widgets/page_link.html
$ hg st
? apps/cms/templates/cms/file

答案 2 :(得分:0)

我认为这是你的正则表达式中的*字符。我认为因为*表示0或更多,正则表达式将匹配您的字符串的位置0,忽略每个文件,hgignore将其解释为错误,使您的表达式无效。

我只使用“_DEPRECATED”(不带引号),因为它会匹配字符串的字符31。我选择了这个子集,因为看起来你试图忽略任何带有字符串_DEPRECATED的文件。如果这不是您想要的匹配,请告诉我,我会尝试提供您可以使用的不同正则表达式。

另外,你是否试图忽略以“static”字符开头的任何文件,因为这就是其他行看起来的样子。

此外,还有一个可以使用的glob语法,它比正则表达式更直接。您可以使用这样的语法轻松忽略整个目录。我不知道你是如何布置你的项目的,但是如果忽略整个目录来实现你的目标,这是一个简单的方法。

此处有更多文档:http://www.selenic.com/mercurial/hgignore.5.html