Compatibilidad multiplataforma de Git

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

Los sistemas de archivos de Windows, macOS y Linux tienen limitaciones y comportamientos que no siempre son compatibles con una o varias de las otras plataformas. Dado que Git es una tecnología multiplataforma, es posible que un desarrollador de una plataforma realice una confirmación que contenga archivos o carpetas con nombres incompatibles con el sistema de archivos de otra plataforma. Proteger el repositorio de esto es importante porque los desarrolladores de otras plataformas pueden. sin saberlo, restaurar una confirmación que daña su directorio de trabajo debido a nombres de archivos o rutas de acceso no admitidos.

Azure Repos ofrece tres configuraciones de compatibilidad multiplataforma que ayudan a proteger el repositorio de personas que insertan confirmaciones que no son compatibles con una o varias plataformas. Estas configuraciones están relacionadas con las siguientes limitaciones con los sistemas de archivos:

  • Distinción entre mayúsculas y minúsculas
  • Restricciones de nombres de archivos y carpetas
  • Restricciones de longitud de ruta

Distinción entre mayúsculas y minúsculas

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

Aunque muchos de los problemas con un sistema operativo que no distingue entre mayúsculas y 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 presenta 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 las mayúsculas y minúsculas, su contenido terminará mezclándose en sistemas de archivos que no distinguen entre mayúsculas y minúsculas.

Hay dos formas de solucionar un repositorio que tiene conflictos de distinción entre mayúsculas y minúsculas:

  • Consulte el repositorio en un entorno que distinga entre mayúsculas y minúsculas. Cambie el nombre de los archivos y carpetas para que ya no entren en conflicto y luego envíe esos cambios al repositorio. El Subsistema de Windows para Linux es un entorno de este tipo.
  • Use el comando git mv -f <conflicting name> <non-conflicting name> para cada conflicto. Tenga cuidado con el uso exacto de mayúsculas en ambos nombres de archivos.

En primer lugar, es recomendable evitar crear conflictos entre mayúsculas y minúsculas. 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, también será útil adoptar el hábito de usar la función de tabulación para confirmar archivos. Dado que tanto Windows como macOS preservan las mayúsculas y minúsculas, estos enfoques garantizan que los elementos internos de Git vean exactamente el mismo uso de mayúsculas y minúsculas que utiliza el sistema de archivos.

Nombres de rama y etiqueta

Puede crear dos bifurcaciones o etiquetas (conocidas como referencias) que sólo difieren en el uso mayúsculas y minúsculas. Los elementos internos de Git, así como Azure DevOps Services y Azure DevOps Server, 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 (/), barra diagonal, las partes anteriores a la barra diagonal final se representan mediante carpetas.

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

Corrección de nombres de bifurcación:

  1. En la página de bifurcaciones, vaya a la confirmación relacionada.
  2. En el menú contextual, seleccione Nueva bifurcación.
  3. Asigne a la rama un nuevo nombre que no tenga un conflicto de mayúsculas y minúsculas.
  4. Regrese a la página de bifurcaciones y elimine la bifurcación en conflicto.

Corrección de nombres de etiqueta:

  1. En la página de etiquetas vaya a la confirmación etiquetada.
  2. En el menú contextual, seleccione Crear etiqueta.
  3. Asigne a la etiqueta un nuevo nombre que no tenga un conflicto de mayúsculas y minúsculas.
  4. Regrese a la página de etiquetas y elimine la etiqueta en conflicto.

Restricciones de nombre de archivo y de ruta de acceso

Los sistemas operativos Windows, macOS y Linux tienen varias limitaciones de nomenclatura de nombres de archivo y de rutas de acceso. Estas limitaciones restringen los nombres que se puede asignar a los archivos o carpetas, lo que puede crear situaciones problemáticas para los equipos que usan Git en varias plataformas.

Por ejemplo, supongamos que un desarrollador de una plataforma confirma un cambio en el repositorio compartido que contiene un nombre de archivo o una longitud de ruta de acceso que no es válida en otra plataforma. Más adelante, otro desarrollador intenta restaurar esa confirmación en una plataforma en la que el contenido no es válido. Esta situación da como resultado un directorio de trabajo dañado que crea la posibilidad de dañar el repositorio con datos dañados.

Azure Repos ofrece configuraciones de repositorio que bloquean las inserciones que contienen confirmaciones que infringen una o varias de las limitaciones siguientes.

Tabla de referencia para nombres de archivos y rutas de acceso

Restricciones o plataformas Windows macOS Linux
Restricciones de nombre de archivo Nombres de archivo reservados: CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9

Nombres de archivo reservados seguidos de .

Caracteres reservados: \ / : * ? " < >

Nombres de archivo que terminan en . o en espacios en blanco
Nombres de archivo que terminan en / Nombres de archivo que terminan en /
Restricciones de longitud de ruta Las rutas de acceso de Windows tienen una longitud máxima de 260 caracteres (incluido un terminador NULL).

Para los directorios con .NET, el nombre de archivo completo debe ser inferior a 260 caracteres y el nombre del directorio debe ser inferior a 248 caracteres.
Los nombres de archivo tienen un límite de 255 caracteres

La longitud máxima de la ruta de acceso en HFS+ se documenta como ilimitada, aunque algunas versiones de macOS la limitan en 1016 caracteres. Algunos sistemas de archivos admiten 1016 caracteres como ruta de acceso máxima
Los nombres de archivo tienen un límite de 255 caracteres

La longitud máxima de la ruta de acceso es de 4096 caracteres

Compatibilidad con la codificación

Nota:

La compatibilidad con la codificación que se describe en esta sección se admite en Azure DevOps Server 2019.1 y versiones posteriores.

Microsoft agregó compatibilidad con la codificación UTF-16 y UTF-32 a través del punto final de inserción web. Esto significa que conservaremos el tipo de codificación para que no tenga que volver a escribir los archivos como UTF-8. También verá una advertencia al intentar guardar un archivo que no esté codificado con UTF a través de la web (que sólo admite la codificación UTF).

En la captura de pantalla siguiente se muestra un ejemplo del cuadro de diálogo que aparece al introducir cambios de codificación mediante un envío web.

Captura de pantalla donde se ve el cuadro de diálogo al incorporar cambios de codificación a través de una inserción web.