我的.hgignore
文件中有以下内容:
syntax: glob
obj/*
bin/*
*.suo
*.user
*.ncb
如果我注释掉*.
过滤器,过滤器可以很好地过滤掉bin
andobj
文件夹中的文件,但是,如果我保留这些过滤器,我会收到以下错误:
abort: c:\temp\.hgignore: invalid pattern (relre): *.suo
注意:文件采用 UTF-8 编码
我的.hgignore
文件中有以下内容:
syntax: glob
obj/*
bin/*
*.suo
*.user
*.ncb
如果我注释掉*.
过滤器,过滤器可以很好地过滤掉bin
andobj
文件夹中的文件,但是,如果我保留这些过滤器,我会收到以下错误:
abort: c:\temp\.hgignore: invalid pattern (relre): *.suo
注意:文件采用 UTF-8 编码
Mercurial 的错误消息告诉我们 Mercurialsyntax: glob
没有读取您的行。忽略文件中的模式默认为正则表达式,并且*.suo
确实是无效的正则表达式(正则表达式不能以 开头*
)。
由于这是在 Windows 上,并且由于文件是 UTF-8 编码的,所以唯一合理的解释是有一些东西使 Mercurial 忽略了该syntax: glob
行。UTF-8 BOM就是这样一个“东西”!字节顺序标记是插入到 UTF-16 编码文件中的小签名,用于指示文件的字节顺序。对于 UTF-8 编码的文件,不需要也不建议这样做,但 Windows 编辑器无论如何都倾向于插入它们。
要解决此问题,请在记事本中打开文件并选择“另存为”。然后选择 ANSI 作为编码。您的.hgignore
文件是纯 ASCII,因此这与没有 BOM 的 UTF-8 相同。
要忽略完整的bin
和obj
文件夹,您不需要/*
它们后面的内容。
我的 Visual Studio 项目的默认.hgignore
文件如下所示:
syntax: glob
bin
obj
*.suo
*.user
mercurial 不知何故没有解释行语法:glob因为 BOM(字节顺序标记插入文件前面,在英特尔平台上运行的 windows x86-x64 上使用小端序)在 windows 平台上你必须保存文件正如contactmatt所建议的那样使用ASCII。
有趣的是,您可以在使用 utf-8 编码保存在 Windows 平台上的文件的十六进制视图中看到 2 字节 BOM(字节顺序标记)
现在尝试使用记事本以 ASCII 编码保存此文件,您会看到 Byte-Order-Mark 将被删除,而 mercurial 将停止抱怨它。将文件保存为 ASCII 后附加十六进制视图。