在hgignore中奇怪的负向前瞻处理

时间:2012-05-03 14:20:38

标签: regex mercurial tortoisehg hgignore regex-lookarounds

在一个巨大的源代码树中,我希望Mercurial只跟踪一个子文件夹。

specific/component/subfolder

在任何体面的正则表达式工具(Regex Coach,regexpal.com)中,以下内容绝对足够(并且可以理解)

^(?!specific/component/subfolder).+

同时.hgignore坚持要

^(?!extras).+
^extras/(?!extensions).+
^extras/extensions/(?!sharing).+

一旦我把斜线放在前瞻组中,没有任何东西可以通过。

在称这个错误之前(也许是另一个本土的正则表达式解析器?)我问集体智慧: - )

关于hgignore想要什么的间接线索的信用去

Honing the .hgignore file using a negative lookahead

1 个答案:

答案 0 :(得分:5)

请不要在.hgignore中使用负向前瞻。真。每当有人在Stack Overflow中有人提出建议时,我都会告诉他们它不能很好地工作,因为它不是预期的功能。如果Mercurial的.hgignore文件应该是白名单系统,那么它将具有真正的白名单语法。这是一个黑名单,应该这样使用。

负向前瞻语法几乎可以正常工作,因为它不是一个自行开发的正则表达式解析器 - 它是内置于python中的一个,并且禁用负面前瞻看起来像是矫枉过正,但也许是更好的选择。

两种解决方案比使用永远不会令人满意的负面展望处理更好:

  • 只需将存储库向下移动一级 - 向下移动到您实际想要跟踪的文件夹
  • - 或 - 将所有内容列入黑名单,然后'hg add'要跟踪的文件 - 添加覆盖忽略

严重。这不是预期的功能,它永远不会运行良好,但由于向后兼容性原因无法删除。