Regex hgignore中奇怪的负前瞻处理

Regex hgignore中奇怪的负前瞻处理,regex,mercurial,tortoisehg,hgignore,regex-lookarounds,Regex,Mercurial,Tortoisehg,Hgignore,Regex Lookarounds,在一个巨大的源代码树中,我只希望Mercurial跟踪一个子文件夹 specific/component/subfolder 在任何合适的正则表达式工具(regexcoach,regexpal.com)中,以下内容绝对足够(并且可以理解) 同时,hgignore坚持 ^(?!extras).+ ^extras/(?!extensions).+ ^extras/extensions/(?!sharing).+ 只要我把slash放进前瞻小组,就什么都通不过了 在将其称为bug(可能是另一个自制

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

specific/component/subfolder
在任何合适的正则表达式工具(regexcoach,regexpal.com)中,以下内容绝对足够(并且可以理解)

同时,hgignore坚持

^(?!extras).+
^extras/(?!extensions).+
^extras/extensions/(?!sharing).+
只要我把slash放进前瞻小组,就什么都通不过了

在将其称为bug(可能是另一个自制的正则表达式解析器?)之前,我要问一下集体智慧:-)

信用卡间接提供了他到底想干什么的线索


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

负先行语法几乎可以正常工作,因为它不是一个自制的正则表达式解析器——它是python中内置的语法,并且特意禁用负先行看起来有些过分,但可能是更好的选择

有两种解决方案比使用“永远不会让您满意”的消极前瞻处理方法更好:

  • 只需将存储库向下移动一级,即移动到您真正想要跟踪的文件夹中
  • -或者-将所有内容列入黑名单,然后“hg add”要跟踪的文件-add overrides ignore

真的。这不是预期的功能,它永远不会正常工作,但由于向后兼容的原因,无法删除。

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

负先行语法几乎可以正常工作,因为它不是一个自制的正则表达式解析器——它是python中内置的语法,并且特意禁用负先行看起来有些过分,但可能是更好的选择

有两种解决方案比使用“永远不会让您满意”的消极前瞻处理方法更好:

  • 只需将存储库向下移动一级,即移动到您真正想要跟踪的文件夹中
  • -或者-将所有内容列入黑名单,然后“hg add”要跟踪的文件-add overrides ignore

真的。这不是预期的功能,它永远不会正常工作,但由于向后兼容的原因无法删除。

那么从大量的建议来看,实际的白名单可能是一个有用的功能,对吗?:)就我而言,你的两个建议都不适用,这可能是一种流行的情况。Hg是主上游svn的开发补充。因此,我们需要补丁兼容-根在同一目录中。开发人员在每次创建内容时都要记住手动添加,这是不可靠的。更糟糕的是,当它被一些RAD工具为它们创建时。就我个人而言,我很庆幸至少这样的黑名单是有效的。我没有参与决定只将其列入黑名单,但我确实认为这是正确的。执行
hg status--unknown--no status>.hgignore
忽略当前存在且未添加的所有内容非常简单。确保人们看到他们选择不保护的所有内容,至少在其前面加上一个“
”,这似乎符合我在Mercurial用户界面上观察到的警告方面的错误。该链接最终出现在Bugzilla主页上。这一条可能更为最新:如果这方面有任何进展,它看起来就像是信息的最终来源。谢谢。是的,这是Matt用自己的话对它的看法:这是一个古老而反复出现的特性请求,在这个bug创建之前我就拒绝了。我已经编写并支持了一些包含/排除文件语法的文档,并决定对1%的用户说一次“不,你不能那样做”,而不是对20%的用户反复说“不,你看错了文档”。因此,从大量的建议来看,一个实际的白名单可能是一个有用的功能,对吗?:)就我而言,你的两个建议都不适用,这可能是一种流行的情况。Hg是主上游svn的开发补充。因此,我们需要补丁兼容-根在同一目录中。开发人员在每次创建内容时都要记住手动添加,这是不可靠的。更糟糕的是,当它被一些RAD工具为它们创建时。就我个人而言,我很庆幸至少这样的黑名单是有效的。我没有参与决定只将其列入黑名单,但我确实认为这是正确的。执行
hg status--unknown--no status>.hgignore
忽略当前存在且未添加的所有内容非常简单。确保人们看到他们选择不保护的所有内容,至少在其前面加上一个“
”,这似乎符合我在Mercurial用户界面上观察到的警告方面的错误。该链接最终出现在Bugzilla主页上。这一条可能更为最新:如果这方面有任何进展,它看起来就像是信息的最终来源。谢谢。是的,这是Matt用自己的话对它的看法:这是一个古老而反复出现的特性请求,在这个bug创建之前我就拒绝了。我已经编写并支持了一些包含/排除文件语法的文档,并决定对1%的用户说一次“不,你不能那样做”,而不是对20%的用户反复说“不,你看错了文档”。
^(?!extras).+
^extras/(?!extensions).+
^extras/extensions/(?!sharing).+