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

Pav*_*nek 1 regex mercurial tortoisehg hgignore regex-lookarounds

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

specific/component/subfolder
Run Code Online (Sandbox Code Playgroud)

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

^(?!specific/component/subfolder).+
Run Code Online (Sandbox Code Playgroud)

同时.hgignore坚持要

^(?!extras).+
^extras/(?!extensions).+
^extras/extensions/(?!sharing).+
Run Code Online (Sandbox Code Playgroud)

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

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

关于hgignore想要去的东西的间接线索的信用

使用负向前瞻性修改.hgignore文件

Ry4*_*ase 5

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

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

两种解决方案比使用永远不会让您满意的负面预测处理更好:

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

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