El proyecto de código abierto Git ha presentado su versión 2.50, una actualización cargada de funcionalidades y correcciones de errores gracias a la colaboración de 98 contribuyentes, 35 de ellos nuevos. Esta versión se enfoca en optimizar varios aspectos clave de Git, desde la gestión de objetos inalcanzables hasta la mejora del rendimiento en repositorios grandes.
Mejoras en la gestión de ‘Cruft Packs’
Git 2.50 introduce mejoras significativas en la gestión de ‘cruft packs’, una característica que se introdujo en versiones anteriores para almacenar objetos inalcanzables en el repositorio. Un ‘cruft pack’ es similar a un archivo ‘pack’ ordinario, pero incluye un archivo ‘.mtimes’ que rastrea cuándo se escribió cada objeto por última vez, determinando así cuándo es seguro descartarlo.
¿Qué hay de nuevo?
- Comandos más sencillos: Se ha mejorado la ergonomía de la línea de comandos para facilitar la gestión de múltiples ‘cruft packs’.
- Corrección de errores: Se han solucionado errores que impedían la actualización de los tiempos de modificación de los objetos, lo que provocaba su eliminación prematura.
- Nueva opción ‘–combine-cruft-below-size’: Esta opción permite combinar ‘cruft packs’ más pequeños para reducir su número total en el repositorio.
- Reutilización de ‘–max-cruft-size’: Ahora, esta opción funciona como un reemplazo específico para ‘cruft packs’ de ‘–max-pack-size’, determinando el tamaño del ‘pack’ de salida.
Estas mejoras permiten una gestión más eficiente de los objetos inalcanzables, optimizando el espacio y el rendimiento del repositorio.
Bitmaps Multi-Pack Incrementales
Git 2.50 también trae soporte para bitmaps multi-pack incrementales, una característica que mejora el rendimiento en repositorios grandes. Los índices multi-pack (MIDX) actúan como un único archivo ‘.idx’ para objetos distribuidos en múltiples ‘packs’.
¿Cómo funcionan?
Los bitmaps de alcance multi-pack almacenan una colección de bitmaps correspondientes a una selección de ‘commits’. Cada posición de bit en un bitmap de ‘pack’ se refiere a un objeto en ese ‘pack’. En el bitmap de cada ‘commit’, los bits establecidos corresponden a objetos que son alcanzables desde ese ‘commit’, y los bits no establecidos representan aquellos que no lo son.
La actualización de los índices multi-pack puede ser un problema en repositorios grandes, ya que cada actualización requiere reescribir todo el índice y su bitmap correspondiente. Git 2.50 aborda este problema permitiendo que el formato de archivo para los índices multi-pack sea incremental, lo que facilita la adición de objetos al MIDX del repositorio.
Esta característica aún se considera experimental, pero promete mejorar significativamente el rendimiento en repositorios de gran tamaño.
El motor de ‘Merge’ ORT reemplaza a ‘Recursive’
Una de las novedades más destacadas de Git 2.50 es la consolidación del motor de ‘merge’ ORT (Ostensibly Recursive’s Twin), que reemplaza por completo al antiguo motor ‘recursive’. ORT es una reescritura desde cero del motor de ‘merge’ de Git, y ofrece varias ventajas:
- Mayor velocidad: ORT es significativamente más rápido que ‘recursive’.
- Mayor mantenibilidad: Su diseño facilita el mantenimiento y la adición de nuevas funcionalidades.
- Nuevas funcionalidades: ORT permite determinar si dos elementos se pueden fusionar sin necesidad de persistir nuevos objetos en el repositorio.
Con la eliminación de ‘recursive’, Git 2.50 da un paso importante hacia un futuro más eficiente y robusto en la gestión de ‘merges’.
Otras mejoras y cambios
Además de las novedades mencionadas, Git 2.50 incluye una serie de mejoras y cambios adicionales:
- Filtrado de objetos en ‘git cat-file’: Se ha añadido el mecanismo de filtrado de objetos utilizado en clones parciales a ‘git cat-file’, lo que permite filtrar objetos por tipo de forma más concisa.
- Eliminación de ‘–allow-unknown-type’ en ‘git cat-file’: Se ha eliminado la opción ‘–allow-unknown-type’ de ‘git cat-file’, así como el soporte para escribir objetos con tipos desconocidos en ‘git hash-object’.
- Nuevas tareas en ‘git maintenance’: El comando ‘git maintenance’ ahora puede realizar tareas como ‘worktree-prune’, ‘rerere-gc’ y ‘reflog-expire’.
- Nuevo subcomando ‘delete’ en ‘git reflog’: Se ha introducido un nuevo subcomando ‘delete’ en ‘git reflog’ para eliminar el ‘reflog’ completo de una rama.
- Mejoras en el procesamiento de referencias: Se han optimizado las comprobaciones de nombres de referencia en ‘git update-ref’ y se ha mejorado el manejo de iteradores de referencia.
- Nuevas opciones de configuración para TCP Keepalive: Se han añadido las opciones ‘http.keepAliveIdle’, ‘http.keepAliveInterval’ y ‘http.keepAliveCount’ para controlar el comportamiento de TCP Keepalive en conexiones HTTP.
- Reducción del uso de Perl: Se ha reducido la dependencia de Perl en la suite de pruebas y la herramienta de documentación de Git.
- Mejora cosmética en ‘git rebase -i’: Los mensajes de ‘commit’ en el script TODO de ‘git rebase -i’ ahora se muestran como comentarios para indicar que son solo para referencia.
- Mejoras en ‘git bundle-uri’: Se ha optimizado la función ‘bundle-uri’ para acelerar las clonaciones.
- Mejoras en ‘git add -p’ y ‘git add -i’ en ‘sparse checkouts’: Estos comandos ahora funcionan de forma más fluida en ‘sparse checkouts’.
Conclusión
Git 2.50 es una actualización importante que introduce una serie de mejoras y optimizaciones para mejorar el rendimiento y la eficiencia de Git. Desde la gestión de objetos inalcanzables hasta la consolidación del motor de ‘merge’ ORT, esta versión ofrece nuevas herramientas y funcionalidades para optimizar tus repositorios y flujos de trabajo.
Si eres un usuario de Git, te recomendamos que actualices a la versión 2.50 para aprovechar todas estas novedades.
Leave a Comment