11

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

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

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

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

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

4

3 回答 3

14

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

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

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

于 2012-01-10T07:28:53.080 回答
3

要忽略完整的binobj文件夹,您不需要/*它们后面的内容。

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

syntax: glob
bin
obj
*.suo
*.user
于 2012-01-10T06:48:38.090 回答
1

mercurial 不知何故没有解释行语法:glob因为 BOM(字节顺序标记插入文件前面,在英特尔平台上运行的 windows x86-x64 上使用小端序)在 windows 平台上你必须保存文件正如contactmatt所建议的那样使用ASCII。

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

在此处输入图像描述

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

在此处输入图像描述

于 2016-07-24T18:40:22.523 回答