Manejo de nombre de archivo insensible a mayúsculas y minúsculas en Mercurial
-
04-07-2019 - |
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?
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:
- 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 "
- 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:
- hg init
- línea de eco > Foo
- hg agregar Foo
- hg commit -m 'commit Foo'
- mover Foo not-foo
- mover no FOO FOO
- 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