有目录结构
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 。
有什么想法吗?
答案 0 :(得分:0)
不幸的是,mercurial ignore模式不区分文件和目录;因此,如果您忽略未在.txt
中结束的每个名称,您也将忽略目录。但由于目录名通常没有后缀, 所做的是忽略每个具有[{1}}之后的后缀的名称,如下所示:
.txt
故障:
^foo/.*[^/]\.[^/]*$(?<!txt)
foo /中的任何路径;
^foo/.*
一个句点,前面是(至少)一个非斜杠字符;
[^/]\.
,路径最终后缀;最后:
[^/]*$
检查行结束前是否有(?<!txt)
。
这允许通过以句点(txt
)开头的名称和根本不包含句点的名称(.hgignore
)。如果你有没有后缀的文件,你将不得不找到另一种方法来排除它们,但这应该可以让你在那里大部分时间。如果您的目录名称在中间有点,这将抑制它们,您需要更加努力地排除它们 - 或者改变您的方法。
(顺便说一句,拥有一长串被忽略的后缀可能更安全,并在必要时添加它;很快就会使列表稳定下来,并且你不会冒险忽略不应该的东西。)