Git 2.41 ya fue liberado y estas son sus novedades
Después de tres meses de desarrollo, se dio a conocer el lanzamiento de la nueva versión del sistema de control de código fuente distribuido Git 2.41. En comparación con la versión anterior, se aceptaron 542 cambios en la nueva versión, preparada con la participación de 95 desarrolladores, de los cuales 29 participaron en el desarrollo por primera vez.
Para quienes desconocen de Git, deben saber que es uno de los sistemas de control de versiones más populares, fiables y de alto rendimiento que proporciona herramientas de desarrollo no lineal flexibles basadas en bifurcaciones y fusiones de bifurcaciones.
Principales novedades de Git 2.41
En esta nueva versión destaca que se ha mejorado el manejo de objetos «unreachable» a los que no se hace referencia en el repositorio (no se hace referencia a ramas o etiquetas). El recolector de basura elimina los objetos, pero permanecen en el repositorio durante un cierto tiempo antes de eliminarlos para evitar condiciones de carrera.
Para realizar un seguimiento del período de los objetos, es necesario vincularles etiquetas con el tiempo de cambio de objetos similares, lo que no permite almacenarlos en un archivo de paquete, en el que todos los objetos tienen un tiempo de cambio común.
Anteriormente, cada objeto se almacenaba en un archivo separado, lo que generaba problemas si había una gran cantidad de objetos nuevos que aún no estaban sujetos a eliminación. En la nueva versión, Cruft Packs se utiliza de forma predeterminada para empaquetar objetos «unreachable«, que permite almacenar todos los objetos en un archivo de paquete y reflejar los datos sobre el tiempo de modificación de cada objeto en una tabla separada almacenada en un archivo con la extensión «.mtimes» y vinculado mediante un archivo de índice con el Extensión «.idx».
Otro de los cambios que se destaca de esta nueva versión, es que está habilitado el mantenimiento de revindex en el disco para los archivos del paquete. Cuando se probó en los repositorios Torvalds/Linux, el uso de un índice inverso se menciona que permitió acelerar las operaciones «git push» que consumen muchos recursos en 1,49 veces, y las operaciones simples, como calcular el tamaño de un solo objeto usando «git cat- file –batch=’%(objectsize:disk) ‘» 77 veces.
El índice inverso incluido en la nueva versión tiene como objetivo agilizar el proceso de determinación de la identificación del objeto a partir de la información sobre la ubicación del objeto en el archivo del paquete. La operación de construir un índice se reduce a construir una matriz de pares de «posición de objeto» y ordenarla por posición, lo que puede llevar mucho tiempo para archivos de paquetes grandes.
Por ejemplo, la operación de mostrar el contenido de los objetos, que usa un índice directo, fue 62 veces más rápida que la operación de mostrar el tamaño de los objetos, para los cuales no se indexaron los datos de relación de posición a objeto. Después de usar el índice inverso, estas operaciones comenzaron a tomar aproximadamente el mismo tiempo. Los índices inversos también le permiten acelerar la operación de envío de objetos al ejecutar comandos de búsqueda y envío mediante la transferencia directa de datos preparados desde el disco.
Tambien se destaca que en Git 2.41 se agregó soporte para pasar encabezados WWW-Authenticate entre el controlador de credenciales y el servicio de autenticación al protocolo » asistente de credenciales » que se usa para pasar credenciales cuando se accede a repositorios restringidos. La compatibilidad con el encabezado WWW-Authenticate permite que los parámetros de alcance de OAuth se pasen a un acceso de usuario separado de manera más granular a los repositorios y delimitan los alcances disponibles para las solicitudes.
De los demás cambios que se destacan de la nueva versión:
- Se agregó la opción de formato «%(ahead-behind:<base>)» al comando for-each-ref, que permite obtener información de inmediato sobre la cantidad de confirmaciones presentes o ausentes en una determinada rama, en relación con otra rama.
- Se agregó la opción «–porcelain» al comando «git fetch», que genera una salida en el formato «<flag> <old-object-id> <new-object-id> <local-reference>», menos legible, pero más conveniente para analizar en scripts.
- Se agregó la configuración «fetch.hideRefs» para acelerar las operaciones «git fetch» ocultando parte de las referencias en el repositorio local en la etapa de verificación de que el servidor envió el conjunto completo de objetos, lo que ahorra tiempo al limitar la verificación solo a los servidores de la que se recuperan directamente los datos.
El comando «git fsck» implementa la capacidad de verificar corrupción, coincidencia de suma de verificación y validación de valores en mapas de bits de accesibilidad e índices inversos. - El comando «git clone –local» ahora muestra un error al intentar copiar desde un repositorio que contiene enlaces simbólicos dentro de $GIT_DIR.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.