Mercurial为简单的GLOB语法提供了“无效模式”错误

时间:2012-01-10 04:46:59

标签: regex version-control unicode mercurial hgignore

我的.hgignore文件中有以下内容:

syntax: glob
obj/*
bin/*
*.suo
*.user
*.ncb

如果我注释掉*.过滤器,则过滤可以很好地过滤掉binobj文件夹中的文件,但是,如果我保留这些过滤器,我会收到以下内容:错误:

abort: c:\temp\.hgignore: invalid pattern (relre): *.suo

注意:文件采用UTF-8编码

3 个答案:

答案 0 :(得分:11)

Mercurial的错误消息告诉我们,Mercurial不会读取您的syntax: glob行。忽略文件中的模式默认为正则表达式,*.suo确实是无效的正则表达式(正则表达式不能以*开头)。

由于这是在Windows上,并且由于文件是UTF-8编码的,因此唯一合理的解释是有一些东西使Mercurial忽略syntax: glob行。 UTF-8 BOM就是这样的“东西”!字节顺序标记是插入UTF-16编码文件的小签名,用于指示文件的字节顺序。对于UTF-8编码文件,不需要或建议这样做,但Windows编辑器无论如何都倾向于插入它们。

要解决此问题,请在记事本中打开该文件,然后选择“另存为”。然后选择ANSI作为编码。您的.hgignore文件是纯ASCII,因此这与没有BOM的UTF-8有效。

答案 1 :(得分:3)

要忽略完整的binobj文件夹,您不需要背后的/*

Visual Studio项目的默认.hgignore文件如下所示:

syntax: glob
bin
obj
*.suo
*.user

答案 2 :(得分:1)

由于BOM(在文件前面插入了字节顺序标记,在英特尔平台上运行的Windows x86-x64上使用了小端),因此mercurial不能解释行语法:glob )在Windows平台上,您必须将文件保存为ASCII,如contactmatt所建议的那样。

有趣的是,您可以使用utf-8编码在Windows平台上保存的文件的十六进制视图中看到2字节BOM(字节顺序标记)

enter image description here

现在尝试使用ASCII编码的记事本保存此文件,您会看到Byte-Order-Mark将被删除,mercurial将停止抱怨它。以ASCII格式保存文件后附加十六进制视图。

enter image description here