Mercurial .hgignore在指定文件夹的所有子文件夹中排除所有文件而不是'.txt'

时间:2012-10-29 08:56:37

标签: mercurial hgignore

有目录结构

foo
 -1.txt
 -1.notxt
 -bar
  -2.txt
  -3.notxt
  -sub
   -1.txt
   -2.txt
another-folders-and-files

想要排除文件夹 foo 及其子文件夹中的所有非'.txt'文件。 最相似的是这种模式:

^foo/(?!.*\.txt$)

但它不仅从 foo 中排除了 1.notxt 文件,而且还排除了所有子文件夹。 我认为,因为 bar 符合我的排除模式,但我不明白怎么说hg不要忽略 bar

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,mercurial ignore模式不区分文件和目录;因此,如果您忽略未在.txt中结束的每个名称,您也将忽略目录。但由于目录名通常没有后缀, 所做的是忽略每个具有[{1}}之后的后缀的名称,如下所示:

.txt

故障:

^foo/.*[^/]\.[^/]*$(?<!txt) foo /中的任何路径;

^foo/.*一个句点,前面是(至少)一个非斜杠字符;

[^/]\.,路径最终后缀;最后:

[^/]*$检查行结束前是否有(?<!txt)

这允许通过以句点(txt)开头的名称和根本不包含句点的名称(.hgignore)。如果你有没有后缀的文件,你将不得不找到另一种方法来排除它们,但这应该可以让你在那里大部分时间。如果您的目录名称在中间有点,这将抑制它们,您需要更加努力地排除它们 - 或者改变您的方法。

(顺便说一句,拥有一长串被忽略的后缀可能更安全,并在必要时添加它;很快就会使列表稳定下来,并且你不会冒险忽略不应该的东西。)