0

有目录结构

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

有任何想法吗?

4

1 回答 1

0

不幸的是,mercurial 忽略模式不区分文件和目录。因此,如果您忽略每个不以 结尾的名称.txt,您也会忽略目录。但是由于目录名称通常没有后缀,因此您可以忽略所有后缀不是 的名称.txt,如下所示:

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

分解:

^foo/.*foo/ 中的任何路径;其次是

[^/]\.以(至少)一个非斜线字符开头的句点;其次是

[^/]*$,一个路径结尾的后缀;最后:

(?<!txt)txt检查在行尾之前是否没有。

这允许以句点 ( ) 开头的.hgignore名称和根本不包含句点 ( README) 的名称通过。如果您有没有后缀的文件,则必须找到另一种排除它们的方法,但这应该可以帮助您完成大部分工作。如果您的目录名称中间带有点,这将抑制它们,您需要更加努力地排除它们 - 或改变您的方法。

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

于 2012-11-03T21:17:51.487 回答