3

我有一个 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
4

3 回答 3

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 非常有用。它显示所有未跟踪和未忽略的文件,并且可以输入模式直到正确的文件被忽略。

于 2012-07-03T01:56:48.320 回答
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
于 2012-07-03T01:20:03.000 回答
0

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

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

此外,您是否试图忽略任何以字符“静态”开头的文件,因为那是另一行看起来正在做的事情。

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

更多文档在这里:http ://www.selenic.com/mercurial/hgignore.5.html

于 2012-07-03T01:20:00.567 回答