2012-01-10 15 views
9

Tengo el siguiente en mi archivo .hgignore:Mercurial da error "patrón no válido" para el sintaxis simple MUNDIALIZA

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

Si comento hacia fuera los *. filtros, el filtrado funciona bien filtrado de los archivos de la bin y obj carpeta, sin embargo, si me quedo con esos filtros de recibo el siguiente error:

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

Nota: el archivo está codificado en UTF-8

Respuesta

11

El error de Mercurial nos dice que su línea de syntax: glob no es leído por Mercurial. Los patrones en ignorar archivos predeterminados a expresiones regulares, y *.suo es de hecho una expresión regular no válida (una expresión regular no puede comenzar con *).

Dado que esto está en Windows, y dado que el archivo está codificado en UTF-8, la única explicación razonable es que hay algo que hace que Mercurial ignore la línea syntax: glob. ¡Un UTF-8 BOM es tal "algo"! Una marca de orden de bytes es una pequeña firma insertada en archivos codificados en UTF-16 para señalar el orden de bytes del archivo. Esto no es necesario ni recomendado para los archivos codificados UTF-8, pero los editores de Windows tienden a insertarlos de todos modos.

Para solucionar esto, abra el archivo en el Bloc de notas y seleccione "Guardar como". Luego elija ANSI como la codificación. Su archivo .hgignore es puro ASCII, por lo que este será efectivo igual que UTF-8 sin una lista de materiales.

+0

Tengo mi archivo Mercurial.ini en mi carpeta de usuario (es decir, C: \ users \ ME). En esa carpeta bajo el encabezado [ui] tengo mi nombre de usuario definido. Entonces, ¿está diciendo que en el mismo archivo, agregar sintaxis: glob ayudará? (Solo estoy verificando, porque no puedo probarlo hasta más tarde esta noche) – contactmatt

+0

Acabo de volver a leer su pregunta con más cuidado y se me ocurrió una mejor explicación. Solo necesita volver a guardar su archivo '.hgignore'. –

+0

No pude probarlo anoche, ¡pero estoy ansioso por probarlo esta noche! – contactmatt

3

Para ignorar las carpetas completas bin y obj, no necesita el /* detrás de ellas.

Mi archivo predeterminado .hgignore para proyectos de Visual Studio es el siguiente: Mensaje de

syntax: glob 
bin 
obj 
*.suo 
*.user 
+2

"sintaxis: glob" hizo el truco. ¡Gracias! – crubio

0

mercurial de alguna manera no es la interpretación de la línea sintaxis: glob debido a la lista de materiales (de orden de bytes-Mark inserta justo en frente del archivo, en las ventanas x 86 x 64 que se ejecuta en la plataforma Intel utiliza Little Endian) en la plataforma de Windows tienes que guardar el archivo como ASCII como lo ha aconsejado contactmatt.

Curiosamente se puede ver la lista de materiales de 2 bytes (byte-Order-Mark) en vista hexagonal del archivo guardado en la plataforma Windows utilizando codificación UTF-8

enter image description here

Ahora intenta guardar este archivo usando Bloc de notas en codificación ASCII y vería que Byte-Order-Mark se eliminaría y mercurial dejaría de quejarse al respecto. Adjuntar vista hexadecimal después de guardar el archivo en ASCII.

enter image description here

Cuestiones relacionadas