Noticia Git 2.50: mejoras en rendimiento, para repositorios grandes y mas

git-2.50


Hace pocos días se dio a conocer el lanzamiento de la nueva versión del proyecto Git 2.50, introduciendo más de 600 cambios impulsados por una comunidad activa que en esta ocasión incluyó a 98 desarrolladores, entre ellos 35 contribuyentes nuevos.

Esta nueva versión de Git 2.50 se destaca por la integración de nuevos comandos (git-diff-pairs), nuevas funciones para limpieza, filtrado y mantenimiento, el remplazo del motor de fusión recursive por ORT, asi como también las mejoras de rendimiento y correcciones de errores.

Principales novedades de Git 2.50​


En esta nueva versión de Git 2.50, una de las novedades más importantes que presenta es la optimización en el tratamiento de los llamados «cruft packs», es decir, paquetes de objetos inaccesibles o no referenciados por ramas o etiquetas. Tradicionalmente, Git almacenaba estos objetos en un único archivo de empaquetado grande, lo que podía generar problemas de rendimiento al reempaquetar repositorios con muchos de estos elementos.

Con la nueva versión, Git permite dividir estos cruft packs en varios archivos más pequeños, lo que reduce el uso de disco y mejora el rendimiento de entrada/salida en operaciones masivas. Además, se introduce la opción –combine-cruft-below-size, que permite combinar paquetes pequeños en uno solo de forma más flexible que la opción previa –max-cruft-size, sin imponer un límite al tamaño del archivo combinado. Esta nueva funcionalidad es especialmente útil en proyectos con objetos huérfanos repartidos en múltiples paquetes.

Otra mejora orientada a repositorios de gran escala es el soporte experimental para la actualización incremental de índices MIDX , los cuales almacenan la información sobre objetos en capas separadas utilizando archivos de mapas de bits, lo que permite una actualización más ágil conforme se añaden nuevas confirmaciones. Este avance es fundamental para grandes repositorios que requieren operaciones rápidas de indexación sin necesidad de reconstruir completamente los metadatos.

Reemplazo completo del motor de fusión recursivo por ORT​


Git 2.50 presenta un cambio importante con la eliminación definitiva del motor de fusión recursive tradicional. En su lugar, se consolida el uso de ORT, un motor de fusión más moderno, mantenible y eficiente. ORT no solo ofrece un análisis más preciso de conflictos, sino que permite verificar si una fusión es posible sin generar objetos adicionales. Además, el comando merge-tree incorpora ahora una opción –quiet para utilizarlo como comprobador silencioso de fusiones sin modificar el repositorio.

gitt-diff-pairs: la solución a los problemas de escalabilidad​


Sin dudas, la revisión de código es uno de los pilares del desarrollo colaborativo moderno, y en este proceso las diferencias o diffs entre revisiones juegan un papel importante. Con la llegada de Git 2.50, se presenta una solución pensada para escalar: el nuevo comando git-diff-pairs.

Tradicionalmente, para obtener una comparación entre dos revisiones se utiliza un comando como:

git diff HEAD~1 HEAD

Esto genera un parche completo con todos los cambios entre las revisiones indicadas. Aunque eficaz en muchos casos, puede representar un problema de rendimiento cuando se trata de grandes conjuntos de archivos modificados.

Es por ello que git-diff-pairs, fue diseñado específicamente para recibir entradas en formato raw directamente desde la salida de git diff-tree, y generar los parches correspondientes de manera eficiente y precisa.

El uso es tan sencillo como:

git diff-tree -r -z -M HEAD~ HEAD | git diff-pairs -z

Este comando toma los pares de blobs proporcionados y genera la salida de diferencias exacta, manteniendo la información contextual y permitiendo dividir el trabajo en lotes más pequeños. Esto abre la puerta a procesamiento paralelo, mejora la eficiencia de recursos y facilita la escalabilidad en herramientas que presentan diferencias, como GitLab.

Nuevas funciones para limpieza, filtrado y mantenimiento​


Git 2.50 incluye diversas herramientas adicionales pensadas para mejorar el mantenimiento de repositorios:

  • Se ha añadido el comando git reflog drop, que permite borrar completamente el reflog de una rama específica, ideal para limpiar el historial de trabajo cuando ya no es necesario mantener referencias previas.
  • La opción –filter ahora está disponible en git cat-file –batch, permitiendo filtrar resultados por tipo de objeto.

Ademas de ello, también se destacan varias optimizaciones internas:

  • Mejora en el uso de enlaces simbólicos, con caché de prefijos y reducción de verificaciones redundantes.
  • Eliminación de dependencias de Perl en scripts de documentación y pruebas, sustituidos por funciones de shell o implementaciones en C, lo que facilita la compilación en sistemas con configuraciones minimalistas.
  • Inclusión de un controlador userdiff para el análisis de diferencias en archivos .ini.
  • Mejoras en la compatibilidad del comando git send-email con servidores SMTP como el de Outlook.

Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Continúar leyendo...