不能忽略目录中除* .m以外的所有文件

时间:2014-05-29 14:53:39

标签: regex mercurial hgignore

我希望Mercurial在repo root和所有子目录中自动忽略所有不以'.m'结尾的文件,我无法使其工作。

这是一个虚拟仓库(没有跟踪文件):

./.hgignore
./foo/abcdef.m
./foo/abcdef.txt
./abcdef.m
./abcdef.txt

这是.hgignore:

syntax: regexp
re:.*[^m]$

这就是发生的事情:

~/src/dummy$ hg st -A
? abcdef.m
I .hgignore
I abcdef.txt
I foo/abcdef.m
I foo/abcdef.txt

也就是说,忽略了abcdef.txt和foo / abcdef.txt,但foo / abcdef.m也是如此,不应该这样。

如果我改变我的正则表达式:

syntax: regexp
re:.*[m]$

我得到了预期的结果:

~/src/dummy$ hg st -A
? .hgignore
? abcdef.txt
? foo/abcdef.txt
I abcdef.m
I foo/abcdef.m

.m文件被忽略,.txt文件不被忽略。

我做错了什么?为什么包含正则表达式(以'm'结尾)有效但不是独占正则表达式(不以'm'结尾)?

Ubuntu 14.04上的Mercurial 2.8.2。

1 个答案:

答案 0 :(得分:1)

这是指定限制,您不能排除除以外的所有内容...您可以阅读here

  

<强>限制

     

没有简单的方法可以忽略除一组文件之外的所有文件。   尝试使用反向正则表达式匹配将会失败   其他模式。这是一个故意限制,作为替代   格式都被认为太可能混淆用户   值得额外的灵活性。

@sth就在这里,你在第一次尝试时完全阻止foo子文件夹。