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

con*_*att 10 regex unicode version-control mercurial hgignore

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

syntax: glob
obj/*
bin/*
*.suo
*.user
*.ncb
Run Code Online (Sandbox Code Playgroud)

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

abort: c:\temp\.hgignore: invalid pattern (relre): *.suo
Run Code Online (Sandbox Code Playgroud)

注意:该文件以UTF-8编码

Mar*_*ler 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有效.