我使用TortoiseHg,我有文件夹结构,如下所示:
testSet1
test1
filesystem
input_1.obj
output_1.obj
etalon_1.obj
result_1.obj
test2
filesystem
input_1.obj
output_1.obj
etalon_1.obj
result_1.obj
......
errors.txt
......
result.xml
我只需要忽略目录"testSetN/testN"中的。obj文件,而不是目录"testSetN/testN/filesystem"中的。我使用glob模式"*/*/*"。在。hgignore中,但它不起作用。Mercurial会忽略所有目录(包括"filesystem"目录)中的所有.obj文件。但是如果我使用,例如,"testSet1/*/*."Obj",那么一切都很好。我怎样才能做我需要做的?我没有必要只使用glob语法。我将不胜感激。
查看https://www.selenic.com/mercurial/hgignore.5.html#syntax
glob和regexp模式都不是根模式。格式为*.c的全局语法模式将匹配任何目录中以.c结尾的文件,格式为.c$的regexp模式也会这样做。要根regexp模式,以^.
开头
根据这个,glob */*/*.obj
将匹配filesystem
目录下的.obj
文件,因为glob不是根目录。因此,它通过在testSetN/
如果所有文件夹的前缀都是testSet
,则可以使用全局变量testSet*/*/*.obj
。这样,它将忽略以testSet
开头的目录的子目录中的.obj
文件。-它也会忽略a/testSetX/testY/Z.obj
和testSetN/testN/N.obj
Mercurial还允许您手动添加根据.hgignore会被忽略的文件,因此您可以简单地忽略所有.obj
文件,或者使用您想要跟踪的*/*/*.obj
和hg add
文件的原始glob。
编辑:在注释中讨论添加正则表达式
如果你更喜欢正则表达式,或者没有一个模式来根全局变量,你需要使用正则表达式。正则表达式^[^/]*/[^/]*/[^/]*.obj$
匹配任何.obj
文件,从存储库根正好两个级别。即:
-
^
将匹配锚定在存储库的根 -
[^/]*/
匹配任何一级目录。它是不包含目录分隔符/
的任何字符序列。再次输入 -
[^/]*/
,以匹配任何二级目录。 -
[^/]*.obj$
匹配任何以.obj
结尾的文件名