【发布时间】:2014-05-29 14:53:38
【问题描述】:
我希望 Mercurial 自动忽略 repo 根目录和所有子目录中所有不以 '.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。
【问题讨论】:
-
您的正则表达式不包括“foo”目录,因此不包括“foo/abcdef.m”。不知道如何最好地解决它。
-
您可以尝试将您的正则表达式“植根”到字符串的开头吗?如果这可行(我没有要测试的 mercurial),我可以添加一个带有解释的答案:
re:^.*[^m]$ -
不,问题似乎是没有办法只匹配文件名而不匹配目录名。我想这个问题是无法解决的:(