我想让Mercurial自动忽略所有不以'结尾的文件。在repo根目录和所有子目录中,我无法使此工作。
这是一个虚拟的repo(没有文件跟踪):
./.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也被忽略。
如果我把正则表达式改成相反的
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'结尾)?
这是一个指定的限制,你不能排除除之外的所有…你可以在这里阅读:
没有直接的方法可以忽略除一组文件之外的所有文件。尝试使用反向正则表达式匹配将会失败其他模式。这是一个有意的限制格式被认为太容易让用户感到困惑值得额外的灵活性。
@sth在这里,你在第一次尝试时完全阻塞了foo
子文件夹。