Git: distinción de mayúsculas y minúsculas

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Los sistemas de archivos de Windows y macOS no distinguen mayúsculas de minúsculas (pero conservan las mayúsculas y minúsculas) de forma predeterminada. La mayoría de los sistemas de archivos de Linux distinguen mayúsculas de minúsculas. Git se creó originalmente para ser el sistema de control de versiones del kernel de Linux por lo que, como cabe esperar, distingue mayúsculas de minúsculas.

Aunque muchos de los problemas con un sistema operativo que no distingue mayúsculas de minúsculas se han solucionado en Git para Windows, sigue habiendo algunas peculiaridades.

Nombres de archivo y carpeta

En Linux, la restauración de un repositorio de Git que contiene "File.txt" y "file.txt" no tiene ningún problema. Son nombres de archivo distintos. En Windows y macOS, la restauración de ambos archivos dará como resultado que el segundo sobrescriba al primero. Si dos carpetas solo difieren por mayúsculas y minúsculas, su contenido terminará mezclándose en sistemas de archivos que no distinguen mayúsculas de minúsculas.

Corrección de conflictos de mayúsculas y minúsculas

Una manera de corregir un repositorio con este problema es restaurarlo en un entorno que distingue mayúsculas de minúsculas. Cambie el nombre de los archivos y carpetas para que ya no entren en conflicto y, a continuación, inserte esos cambios en el repositorio. El Subsistema de Windows para Linux es un entorno de este tipo. Otro enfoque consiste en usar el comando git mv -f <conflicting name> <non-conflicting name> para cada conflicto, teniendo cuidado con el uso exacto de mayúsculas en ambos nombres de archivo.

Prevención de conflictos con el uso de mayúsculas y minúsculas

Es recomendable evitar que se cree esta situación en primer lugar. Azure Repos ofrece una configuración de cumplimiento de mayúsculas y minúsculas para evitar envíos de cambios que provocarían esta situación. Para los desarrolladores, la adopción del hábito de usar la finalización con tabulación para confirmar archivos también ayudará. Dado que Windows y macOS conservan mayúsculas y minúsculas, esto garantizará que los elementos internos de Git vean exactamente el mismo uso de mayúsculas y minúsculas que el sistema de archivos.

Nombres de rama y etiqueta

Puede crear dos ramas o etiquetas (conocidas como "referencias") que solo difieren en el uso mayúsculas y minúsculas. Los elementos internos de Git, así como Azure DevOps Services/TFS, las tratarán como dos referencias independientes. En el equipo de un usuario, Git usa el sistema de archivos para almacenar referencias. Las recuperaciones de cambios y otras operaciones comienzan a producir errores debido a la ambigüedad. Cada referencia se representa mediante un archivo pequeño y, si un nombre de referencia contiene caracteres /, las partes anteriores al / final se representan mediante carpetas.

Una manera sencilla de evitar problemas es usar siempre nombres de etiqueta y rama en minúsculas. Si ya ha creado dos ramas o etiquetas que tienen este problema, puede corregirlo en la interfaz de usuario web de Azure Repos.

Corrección de nombres de rama

En la página de ramas, vaya a la confirmación relacionada. En el menú contextual, elija "Nueva rama". Asigne a la rama un nuevo nombre que no tenga un conflicto de mayúsculas y minúsculas. Vuelva a la página de ramas y elimine la rama con conflictos.

Corrección de nombres de etiqueta

Los pasos para corregir un nombre de etiqueta son similares a los de las ramas. En la página de etiquetas, vaya a la confirmación etiquetada. En el menú contextual, elija "Crear etiqueta". Asigne a la etiqueta un nuevo nombre que no tenga un conflicto de mayúsculas y minúsculas. Vuelva a la página etiquetas y elimine la etiqueta con conflictos.