【问题标题】:Why does my regexp not get the files I want in Mercurial's .hgignore?为什么我的正则表达式在 Mercurial 的 .hgignore 中没有得到我想要的文件?
【发布时间】:2011-07-22 20:31:00
【问题描述】:

我一直在为我的 .hgignore 文件寻找正则表达式,并在 SO(如 this)上找到了几个非常有用的答案,并提出了一个我认为应该可以排除所有文件和目录的正则表达式,除了那些列在否定前瞻中的。

^(?!(certs/|config/|\.hgignore)).+

它似乎适用于RegExr,并遵循其他 SO 答案的模式,但如果我执行hg status,则显示的唯一文件是.hgignore 本身; Mercurial 看不到 certsconfig 中的任何内容。 (如果我删除.hgignore,肯定会出现其中的文件。)

我这里有什么问题?

【问题讨论】:

  • 只是好奇:在 mercurial 中不可能每行定义一个正则表达式?
  • 是的,但我试图让该文件充当白名单,而不是作为应被忽略的文件黑名单的预期目的。据我了解,使用多个条目会匹配所有内容,因此不要标记任何版本。
  • 同样的问题......类似的正则表达式(我只使用.*而不是你的.+)在RegexBuddy中工作但在mercurial中没有工作,只有.hgignore出现在hg status

标签: regex mercurial hgignore


【解决方案1】:

白名单并不容易,因为它们很少需要。一旦你添加了一个文件,它就会被跟踪,而 .hgignore 文件根本不会影响它。这不适用于目录(目录不在 Mercurial 或 git 中跟踪),但它确实处理 .hgignore 之类的文件。因此,只需完全添加一次,即使您尝试过,您也可以将其从白名单中忽略。

如果你真的想忽略大多数事情,只需使用这个 .hgignore 文件:

.*

然后在创建新文件时添加 cert 和 config 文件(只是勉强解决,但不会经常添加新的 cert 和 configs 文件版本)。一旦他们被添加,他们就会被跟踪,他们的更改将显示在 hg status 中,并在他们被修改时显示出来。

【讨论】:

  • 好的。我认为 Mercurial 应该允许像 Apache 的 Order Allow,Deny 之类的东西来改变 .hgignore 的含义,但似乎对此没什么兴趣,我暂时准备好了。
【解决方案2】:

只是猜测。您使用的是 @"literal string" 还是 "regular string" 您可能需要将 \ 变成 \\

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
相关资源
最近更新 更多