Mercurial 中忽略文件的文件名模式
File name pattern for ignore files in Mercurial
我使用 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" 中的文件。
我在 .hgignore 中使用 glob 模式“*/*/*.obj”,但它不起作用。 Mercurial 只是忽略所有目录(包括 "filesystem" 目录)中的所有 .obj 文件。但是如果我使用,例如,"testSet1/*/*.obj",那么一切正常。我怎样才能做我需要的?
我没有必要只使用 glob 语法。我将不胜感激。
正在查看https://www.selenic.com/mercurial/hgignore.5.html#syntax
Neither glob nor regexp patterns are rooted. A glob-syntax pattern of the form *.c will match a file ending in .c in any directory, and a regexp pattern of the form .c$ will do the same. To root a regexp pattern, start it with ^.
据此,glob */*/*.obj
将匹配 filesystem
目录中的 .obj
个文件,因为 glob 没有根目录。因此它通过在 testSetN/
处生成 glob 来匹配这些文件
如果所有文件夹都有 testSet
前缀,则可以使用 glob testSet*/*/*.obj
。这样,它将忽略以 testSet
开头的目录的子目录中的 .obj
文件。 - 它也会忽略 a/testSetX/testY/Z.obj
以及 testSetN/testN/N.obj
Mercurial 还允许您手动添加根据 .hgignore 否则将被忽略的文件,因此您可以简单地忽略所有 .obj
文件,或使用 */*/*.obj
和 hg add
您要跟踪的文件。
编辑:添加评论中讨论的正则表达式。
如果您更喜欢正则表达式,或者没有将 glob 作为根的模式,则需要使用正则表达式。正则表达式 ^[^/]*/[^/]*/[^/]*\.obj$
匹配任何 .obj
文件,正好位于存储库根目录的两个级别。即:
^
将匹配锚定在存储库的根目录中
[^/]*/
匹配任意一级目录。这是任何不包含目录分隔符的字符序列 /
再次[^/]*/
,匹配任意二级目录
[^/]*\.obj$
匹配任何以 .obj
结尾的文件名
我使用 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" 中的文件。 我在 .hgignore 中使用 glob 模式“*/*/*.obj”,但它不起作用。 Mercurial 只是忽略所有目录(包括 "filesystem" 目录)中的所有 .obj 文件。但是如果我使用,例如,"testSet1/*/*.obj",那么一切正常。我怎样才能做我需要的? 我没有必要只使用 glob 语法。我将不胜感激。
正在查看https://www.selenic.com/mercurial/hgignore.5.html#syntax
Neither glob nor regexp patterns are rooted. A glob-syntax pattern of the form *.c will match a file ending in .c in any directory, and a regexp pattern of the form .c$ will do the same. To root a regexp pattern, start it with ^.
据此,glob */*/*.obj
将匹配 filesystem
目录中的 .obj
个文件,因为 glob 没有根目录。因此它通过在 testSetN/
如果所有文件夹都有 testSet
前缀,则可以使用 glob testSet*/*/*.obj
。这样,它将忽略以 testSet
开头的目录的子目录中的 .obj
文件。 - 它也会忽略 a/testSetX/testY/Z.obj
以及 testSetN/testN/N.obj
Mercurial 还允许您手动添加根据 .hgignore 否则将被忽略的文件,因此您可以简单地忽略所有 .obj
文件,或使用 */*/*.obj
和 hg add
您要跟踪的文件。
编辑:添加评论中讨论的正则表达式。
如果您更喜欢正则表达式,或者没有将 glob 作为根的模式,则需要使用正则表达式。正则表达式 ^[^/]*/[^/]*/[^/]*\.obj$
匹配任何 .obj
文件,正好位于存储库根目录的两个级别。即:
^
将匹配锚定在存储库的根目录中[^/]*/
匹配任意一级目录。这是任何不包含目录分隔符的字符序列/
再次[^/]*/
,匹配任意二级目录[^/]*\.obj$
匹配任何以.obj
结尾的文件名