hgignore:帮助忽略所有文件,但是某些文件
我需要一个.hgdontignore文件:-)来包含某些文件并排除目录中的所有内容。 基本上我只想包括.jar文件在一个特定的目录,没有别的。 我怎样才能做到这一点? 我不擅长正则expression式语法。 或者我可以用glob语法来完成吗? (我更喜欢为了可读性)
就像一个示例位置,假设我想排除foo/bar/
foo/bar/*.jar
之外的所有文件。
要做到这一点,你需要使用这个正则expression式:
foo/bar/.+?\.(?!jar).+
说明
你告诉它要忽略什么,所以这个expression式正在寻找你不想要的东西。
- 您查找名称(包括相对目录)包含(foo / bar /)的任何文件
- 然后查找一段时间之前的任何字符(。+?\。==匹配任何时间的一个或多个字符,直到达到句点字符)
- 然后确定它没有“jar”结尾(?!jar)(这被称为负面预览
- 最后你抓住它有的结局(。+)
正则expression式很容易搞砸,所以我强烈build议你得到像Regex Buddy这样的工具来帮助你构build它们。 它将把正则expression式分解成简单的英文,这真的有帮助。
编辑
嘿Jason S ,你抓到我了,它确实错过了那些文件。
这个正确的正则expression式将适用于你列出的每个例子:
foo/bar/(?!.*\.jar$).+
它发现:
- 富/酒吧/ baz.txt
- 富/酒吧/巴兹
- 富/酒吧/jar
- 富/酒吧/ baz.jar.txt
- 富/酒吧/ baz.jar。
- 富/酒吧/巴兹。
- 富/酒吧/ baz.txt。
但是没有find
- 富/酒吧/ baz.jar
新的解释
这表示在“foo / bar /”中查找文件,如果零个或多个字符后面跟着“.jar”,然后再没有其他字符($表示行尾),则查找文件,如果没有,在这种情况下,匹配以下任何字符。
迈克尔的答案是好的,但另一种select是排除:
foo/bar/**
然后手动添加.jar文件。 您始终可以添加由忽略规则排除的文件,并覆盖忽略。 你只需要记住添加你将来创build的任何jar子。