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"中的。我使用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.objtestSetN/testN/N.obj

Mercurial还允许您手动添加根据.hgignore会被忽略的文件,因此您可以简单地忽略所有.obj文件,或者使用您想要跟踪的*/*/*.objhg add文件的原始glob。

编辑:在注释中讨论添加正则表达式

如果你更喜欢正则表达式,或者没有一个模式来根全局变量,你需要使用正则表达式。正则表达式^[^/]*/[^/]*/[^/]*.obj$匹配任何.obj文件,从存储库根正好两个级别。即:

  • ^将匹配锚定在存储库的根
  • [^/]*/匹配任何一级目录。它是不包含目录分隔符/
  • 的任何字符序列。再次输入
  • [^/]*/,以匹配任何二级目录。
  • [^/]*.obj$匹配任何以.obj
  • 结尾的文件名

相关内容

  • 没有找到相关文章

最新更新