善变的.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

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

正确答案:

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

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

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

另外,您是否试图忽略任何以字符"static"开头的文件,因为这就是另一行正在做的事情。

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

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

相关内容

  • 没有找到相关文章

最新更新