Git 2.56: nuevo modo de resolución de conflictos, mejoras de rendimiento y git-history

 

Git 2.56

Se dio a conocer el lanzamiento de la nueva version de Git 2.56, esta entrega incluye 748 modificaciones desarrolladas por 104 contribuidores y destaca por un nuevo modo seguro para gestionar conflictos, drÔsticas aceleraciones en repositorios masivos, y la expansión de utilidades como git-history y git-refs.

Adicionalmente, esta versión marca el comienzo de la ruta de transición hacia Git 3.0, planeado para la primavera de 2027.

Principales novedades de Git 2.56

En el caso específico de SHA-256, uno de los mayores inconvenientes era la falta de soporte en las plataformas de replicación. GitLab ofrece soporte para SHA-256 desde hace un año, mientras que GitHub anunció una versión beta privada en Git Merge, con disponibilidad general prevista para dentro de unos meses.

Uno de los principales problemas al fusionar ramas (merge) ha sido la gestión de archivos en conflicto cuando el directorio de trabajo contiene otras ediciones sin terminar. Hasta ahora, el comando git add –update se utilizaba frecuentemente para aƱadir los archivos resueltos al Ć­ndice, pero este comando tambiĆ©n aƱade todos los demĆ”s archivos modificados previamente rastreados en el directorio, lo que puede provocar que código a medio terminar se incluya en el commit de fusión por error.

Git 2.56 soluciona esto introduciendo el modo git add –resolved. Este nuevo comando opera exclusivamente sobre los archivos que se encuentran en estado de conflicto e ignora por completo cualquier otro archivo modificado en el directorio de trabajo que no estĆ© relacionado con la fusión. AdemĆ”s, escanea el código en busca de marcadores de conflicto (como <<<<<<<); si detecta alguno, devuelve un error, bloquea la indexación de los archivos y muestra una lista de los elementos que aĆŗn requieren atención manual.

Operaciones en repositorios de escala empresarial (como los de Chromium o el kernel de Linux) han recibido un aumento masivo de rendimiento. El algoritmo responsable de buscar los commits comunes mƔs recientes (necesario al fusionar ramas o comparar historiales) ha sido reestructurado y ahora es capaz de analizar commits que pertenecen de manera exclusiva a una rama, lo que le permite detener el escaneo inmediatamente despuƩs de identificar todos los ancestros comunes posibles, evitando recorrer la totalidad del historial de cambios de forma innecesaria.

En las pruebas de rendimiento, la velocidad de bĆŗsqueda aumentó 20 veces en promedio, alcanzando hasta 70 veces mĆ”s velocidad en algunos repositorios. Al ejecutar git merge-base –all v4.8 v4.9 en el repositorio del kernel de Linux, los pasos de recorrido cayeron drĆ”sticamente de 167 000 a solo 3800. Las operaciones en la tabla de referencias que involucran grandes acumulaciones de registros de eliminación ahora se ejecutan 65 veces mĆ”s rĆ”pido (reduciendo el tiempo de 13 segundos a apenas 0,2 segundos). La ejecución de git diff en el repositorio de Chromium (con 500 000 elementos en el Ć­ndice) redujo su tiempo de ejecución de 8 minutos a tan solo 0,07 segundos.

Optimización de almacenamiento y archivos de paquete

Para optimizar el almacenamiento en servidores, el modo de reempaquetado –path-walk ha sido adaptado. Esta función agrupa los objetos de Git segĆŗn su ruta especĆ­fica en el Ć”rbol de directorios, logrando empaquetados mucho mĆ”s eficientes. Como resultado directo, el tamaƱo del archivo de paquete del repositorio Fluent UI se redujo de 558 MB a 164 MB. Asimismo, la nueva versión permite combinar –path-walk con mapas de bits de accesibilidad e islas delta (tecnologĆ­as utilizadas por plataformas de alojamiento Git para acelerar el servicio y aislar las bifurcaciones).

Como parte de un proyecto de Google Summer of Code, se aƱadió la capacidad de descargar y gestionar archivos grandes de forma inteligente en clones parciales (clones que no descargan todos los objetos inicialmente). El nuevo comando git repack -a –filter=blob:limit=1m –drop-filtered permite a los usuarios buscar blobs (archivos grandes) descargados bajo demanda que ya no se necesitan en el Ć­ndice actual y eliminarlos del disco local para recuperar espacio.

De manera complementaria, el comando git cat-file –batch-command ahora puede consultar los metadatos y el tamaƱo de un objeto remoto sin necesidad de descargar el archivo completo, ahorrando ancho de banda.

La versión 2.56 expande la utilidad de múltiples comandos de manipulación del historial y referencias de Git:

  • git history drop: Este nuevo subcomando permite eliminar un commit existente en una sola lĆ­nea y reescribir automĆ”ticamente el historial adjuntando sus descendientes al commit principal anterior, reemplazando la necesidad de usar git rebase -i y un editor interactivo.
  • git branch –delete-merged: Permite eliminar de forma segura grupos de ramas locales cuyos cambios ya hayan sido integrados en un repositorio externo (ej. origin/main), solucionando el problema de las ramas originadas desde una rama base local que luego se integran directamente en el servidor.
  • git refs create|update|delete|rename: Centraliza y combina las operaciones de bajo nivel para manipular directamente las referencias, incluyendo la posibilidad de exigir la validación de un valor anterior esperado antes de aplicar una actualización o eliminación.
  • git replay –linearize: Introduce una topologĆ­a de fusión plana y lineal al realizar rebases del lado del servidor sin acceder al Ć”rbol de trabajo, descartando y resolviendo el problema de las ramas que contienen commits de fusión (merge commits) que antes bloqueaban el comando.
  • git log –follow: Ahora es capaz de registrar de forma coherente los cambios de nombre de archivos incluso en historiales de confirmación no lineales (como subramas fusionadas). Sugerencias tipogrĆ”ficas: El sistema detecta errores de sintaxis comunes y sugiere el uso correcto, por ejemplo, detectando git push origin/main y sugiriendo git push origin main.

Finalmente, si estas interesado en poder conocer mas al respecto, puedes consultar los detalles en el siguiente enlace.


AƱadir como fuente preferida en Google