hgignore:帮助忽略所有文件,但是某些文件

我需要一个.hgdontignore文件:-)来包含某些文件并排除目录中的所有内容。 基本上我只想包括.jar文件在一个特定的目录,没有别的。 我怎样才能做到这一点? 我不擅长正则expression式语法。 或者我可以用glob语法来完成吗? (我更喜欢为了可读性)

就像一个示例位置,假设我想排除foo/bar/ foo/bar/*.jar之外的所有文件。

要做到这一点,你需要使用这个正则expression式:

 foo/bar/.+?\.(?!jar).+ 

说明

你告诉它要忽略什么,所以这个expression式正在寻找你想要的东西。

  1. 您查找名称(包括相对目录)包含(foo / bar /)的任何文件
  2. 然后查找一段时间之前的任何字符(。+?\。==匹配任何时间的一个或多个字符,直到达到句点字符)
  3. 然后确定它没有“jar”结尾(?!jar)(这被称为负面预览
  4. 最后你抓住它有的结局(。+)

正则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子。