Pregunta

Estoy usando TortoiseHg 0.5 (que incluye Mercurial 1.0.2) en Vista64. Mi entendimiento del Mercurial Book es que Mercurial debe manejar los nombres de archivos en un caso De manera insensible en un sistema de archivos que no distingue entre mayúsculas y minúsculas (como NTFS, que es en lo que estoy). Sin embargo, encuentro que mi instalación de Mercurial es, de hecho, sensible al caso:

>hg status -A foo
C foo
>hg status -A FOO
? FOO

¿Podría ser esto un error en Mercurial, un error en la compilación TortoiseHg de Mercurial, o es algo más? ¿Cómo puedo lograr un manejo de archivos sin distinción de mayúsculas y minúsculas de Mercurial en Windows?

¿Fue útil?

Solución

¡Este problema se ha resuelto en Mercurial 1.1! Desde notas de la versión : Cara de los sistemas de archivos de casos de casos " ;.

En Windows, Mercurial ahora ignora el caso en sus argumentos de línea de comando:

>hg status -A foo
C foo
>hg status -A FOO
C foo

Y también es consciente de que los cambios de nombre de archivo que solo involucran el caso no son archivos nuevos:

>ren foo FOO
>hg status -A fOO
C foo

Por lo tanto, ya no existe ningún riesgo de pasar por alto los cambios debidos a los tipos de errores en la línea de comandos.

Sin embargo, ten en cuenta que el contenido del archivo .hgignore se distingue entre mayúsculas y minúsculas. Esto es un problema solo si estás usando la sintaxis glob; con la sintaxis de expresiones regulares puede poner (? i) al principio de los patrones para hacerlos insensibles.

Otros consejos

Creo que has leído mal el hgbook. La introducción a la sección 7.7 simplemente describe los tres tipos diferentes de sensibilidad a mayúsculas y minúsculas que existen en los sistemas operativos, sin decir que mercurial reflejará esa semántica.

Más adelante en la sección 7.7.2 'Detectando conflictos de casos' dice:

  

Al operar en el trabajo   directorio, Mercurial honra al   política de denominación del sistema de archivos donde   El directorio de trabajo se encuentra. Si   El sistema de archivos conserva mayúsculas, pero   insensible, mercurial tratará   nombres que difieren sólo en el caso como el   mismo.

Cuando haces hg status -A FOO el proceso que está ocurriendo dentro de mercurial es:

  1. Comprueba si existe un archivo en el sistema de archivos que coincida con el argumento del archivo, 'FOO', y en este punto no se distingue entre mayúsculas y minúsculas por lo que encuentra 'foo' y dice " sí, tengo un archivo "
  2. Compruebe si hay una entrada en el manifiesto del archivo que coincida con el argumento del archivo, 'FOO', y no la hay, por lo que el estado muestra un '?' diciendo que es un archivo en el disco que hg no está siguiendo

Para ver mejor que a Mercurial no le importa el caso en NTFS, prueba estos pasos:

  1. hg init
  2. línea de eco > Foo
  3. hg agregar Foo
  4. hg commit -m 'commit Foo'
  5. mover Foo not-foo
  6. mover no FOO FOO
  7. estado hg

y deberías ver a hg diciendo que nada ha cambiado porque lo único que ha cambiado es el caso que hg ignora para ti.

Cuando hago lo mismo en Linux, en cambio veo:

! Foo
? FOO
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top