Git 2.42 llega con mejoras de rendimiento, nuevos comandos y mas
Hace poco se dio a conocer el lanzamiento de la nueva versión de Git 2.42, versión en la cual se han implementado diversas mejoras tales como en los nuevos mapas de bits, nuevos mecanismos, correcciones de errores y más.
En comparación con la versión anterior, en la nueva versión, preparada con la participación de 78 desarrolladores, se aceptaron 453 cambios, de los cuales 17 participaron en el desarrollo por primera vez.
Principales novedades de Git 2.42
En esta nueva versión que se presenta de Git 2.42 podremos encontrar que se propone un nuevo algoritmo para omitir mapas de bits, que refleja datos sobre los conjuntos de objetos disponibles para cada confirmación. El nuevo algoritmo proporciona un aumento significativo del rendimiento cuando el mapa de bits no cubre completamente una de las ramas comparadas. En algunas situaciones, la aplicación del nuevo algoritmo puede provocar una aceleración de 2 a 15 veces.
Otra de las novedades de Git 2.42 son las mejoras implementadas al comando «git for-each-ref«, de las cuales se destaca que ahora en lugar de verificar las referencias excluidas una por una, el nuevo método determina el principio y el final de cada rango excluido y los omite al analizar el archivo de referencias empaquetadas. El patrón de exclusión se especifica con la nueva opción «–exclude«. Además, se agregó la opción «–include«, que le permite devolver piezas individuales del rango excluido.
Ademas de ello, el comando «for-each-ref» recibió mejoras, pues ahora con la opción «–format» es posible mostrar información relacionada con las firmas GPG, por ejemplo, puede mostrar por separado la clave, la impresión de la clave y el nombre del desarrollador que generó la firma digital.
Tambien se destaca que se ha agregado un nuevo mecanismo para guardar objetos inalcanzables (aquellos a los que no se puede acceder desde ninguna rama o etiqueta), pues en esta nueva versión se agregó la opción «gc.recentObjectsHook» que permite configurar la llamada a un programa externo antes de que comience la recolección de basura. El programa especificado en el parámetro gc.recentObjectsHook devuelve una lista de identificadores de objetos que el recolector de basura protegerá contra su eliminación, independientemente de cuánto tiempo hayan estado en el repositorio.
Por otra parte, se destaca el uso extendido del mecanismo «sparse index», cubriendo sólo una parte del repositorio. Los índices parciales pueden mejorar el rendimiento y ahorrar espacio en repositorios que realizan operaciones de clonación parcial (sparse-checkout) u operan en una copia parcial del repositorio. La nueva versión ha movido el comando diff-tree para usar índices parciales.
En el comando «git rev-list«, cuando se utiliza la opción «–stdin«, para facilitar la llamada desde scripts, se utilizan modificadores extendidos como «–branches», «–tags» y «–remotes» se permite especificar a través del flujo de datos de entrada, no solo modificadores que se refieren a confirmaciones por identificación de objeto.
Se implementa la eliminación retrasada del mensaje $GIT_DIR/TAG_EDITMSG, que se realiza solo después de una escritura exitosa de la etiqueta, lo que resuelve el problema de eliminar una nota antes de que se muestre un mensaje de error.
Git 2.42 también viene con un par de nuevas opciones en el comando «git pack-refs» que es responsable de actualizar el archivo «packed-refs» con cualquier nueva referencia suelta que no esté almacenada. En ciertos escenarios (como una referencia que se actualiza o elimina con frecuencia), puede ser útil excluir esas referencias para que no ingresen al archivo «packed-refs» en primer lugar «git pack-refs» ahora entiende cómo modificar el conjunto de referencias que empaqueta usando sus indicadores new «–include» y «–exclude».
De los demás cambios que se destacan de esta nueva versión:
- Se agregó la opción «–orphan» al comando «git worktree add» para crear un árbol de trabajo basado en una rama huérfana.
- El modo «-Z» se ha agregado al comando «git cat-file«, que, a diferencia del modo «-z», aplica una separación basada en caracteres codificados en nulos (en lugar de nuevas líneas) no solo para la entrada sino también para la salida.
- Se agregó la opción ‘–separator‘ al comando «git notes append» para seleccionar el separador de párrafos.
- El comando «git diff –no-index» implementa la capacidad de leer desde canalizaciones con nombre («git diff <(proceso) <(sustitución)»).
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.