Mercurial выдает ошибку «недопустимый шаблон» для простого синтаксиса GLOB - PullRequest
10 голосов
/ 10 января 2012

В моем файле .hgignore есть следующее:

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

Если я закомментирую фильтры *., фильтрация будет работать нормально, отфильтровывая файлы в bin и objОднако, если я оставлю эти фильтры в папке, я получу следующую ошибку:

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

Примечание. Файл закодирован в формате UTF-8

.

Ответы [ 3 ]

11 голосов
/ 10 января 2012

Сообщение об ошибке от Mercurial говорит нам, что ваша строка syntax: glob не прочитана Mercurial.В шаблонах игнорируемых файлов по умолчанию используются регулярные выражения, и *.suo действительно является недопустимым регулярным выражением (регулярное выражение не может начинаться с *).

Так как это в Windows и файл UTF-8в таком случае единственное разумное объяснение состоит в том, что есть что-то, что заставляет Mercurial игнорировать строку syntax: glob. UTF-8 BOM такое "что-то"!Метка порядка байтов - это небольшая подпись, вставленная в файлы в кодировке UTF-16 для обозначения порядка байтов в файле.Это не требуется или не рекомендуется для файлов в кодировке UTF-8, но редакторы Windows в любом случае имеют тенденцию вставлять их.

Чтобы это исправить, откройте файл в Блокноте и выберите «Сохранить как».Затем выберите ANSI в качестве кодировки.Ваш .hgignore файл является чистым ASCII, поэтому он будет таким же, как UTF-8 без спецификации.

3 голосов
/ 10 января 2012

Чтобы игнорировать полные папки bin и obj, вам не нужны /* позади них.

Мой файл .hgignore по умолчанию для проектов Visual Studio выглядит следующим образом:

syntax: glob
bin
obj
*.suo
*.user
1 голос
/ 24 июля 2016

mercurial почему-то не интерпретирует синтаксис строки : glob из-за спецификации (Byte-Order-Mark, вставленный прямо перед файлом, в Windows x86-x64, работающей на платформе Intel, используется переменный порядок байтов)на платформе Windows вы должны сохранить файл как ASCII, как посоветовал contactmatt.

Интересно, что вы можете увидеть 2-байтовую спецификацию (Byte-Order-Mark) в шестнадцатеричном представлении файла, сохраненного на платформе Windows, с использованием utf-8 кодировка

enter image description here

Теперь попробуйте сохранить этот файл с помощью блокнота в кодировке ASCII, и вы увидите, что Byte-Order-Mark будет удален, а Mercurial будетхватит жаловаться на это.Присоединение шестнадцатеричного представления после сохранения файла в ASCII.

enter image description here

...