Git 2.37 ya fue liberado y estas son sus novedades
Se acaba de presentar el lanzamiento de la nueva versión de Git 2.37, el cual 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.
Para garantizar la integridad del historial y la resistencia a los cambios, se utiliza el hash implícito «retroactivo» de todo el historial anterior en cada confirmación, también es posible verificar las firmas digitales de los desarrolladores de etiquetas y confirmaciones individuales.
Principales novedades de Git 2.37
En comparación con la versión anterior, se aceptaron 395 cambios en la nueva versión, preparada con la participación de 75 desarrolladores, de los cuales 20 participaron en el desarrollo por primera vez.
En esta nueva versión se destaca que el mecanismo de índices parciales (sparse index), que cubre solo una parte del repositorio, se ha preparado para su uso generalizado. Los índices parciales pueden mejorar el rendimiento y ahorrar espacio en los repositorios que realizan operaciones de clonación parcial (pago disperso) u operan en una copia incompleta del repositorio.
La nueva versión completa el trabajo de integración de índices parciales en los comandos «git show», «git sparse-checkout» y «git stash». La ganancia de rendimiento más notable del uso de índices parciales está en el comando «git stash», que es hasta un 80 % más rápido en algunas situaciones.
Otro de los cambios que se destaca es que se ha implementado un nuevo mecanismo «cruft packs» para empaquetar objetos inalcanzables que no están referenciados en el repositorio (no referenciados por ramas o etiquetas). El recolector de basura elimina los objetos inalcanzables, pero permanecen en el repositorio durante un cierto tiempo antes de eliminarlos para evitar condiciones de carrera. Para rastrear el período de objetos inalcanzables, se requiere vinculación, están etiquetados 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 modificación común.
El guardado de cada objeto utilizado anteriormente en un archivo separado, el archivo generó problemas en presencia de una gran cantidad de objetos nuevos inalcanzables, todavía no. El mecanismo propuesto «cruft packs» permite almacenar todos los objetos inalcanzables en un archivo de paquete,y los datos sobre el tiempo de modificación de cada objeto se reflejan en una tabla separada almacenada en un archivo con la extensión «.mtimes».
Para Windows y macOS, existe un mecanismo integrado para realizar un seguimiento de los cambios en el sistema de archivos, lo que elimina la necesidad de enumerar todo el directorio de trabajo al realizar operaciones como «estado de git». Anteriormente, para realizar un seguimiento de los cambios a través de ganchos, se podían conectar utilidades de seguimiento de cambios del sistema de archivos externo, como Watchman, pero esto requería la instalación de programas y configuraciones adicionales. Esta funcionalidad ahora está integrada y se puede habilitar con «git config core.fsmonitor true».
El comando «git sparse-checkout» ha dejado de admitir una alternativa al modo «–cone» de definición de plantillas para la clonación parcial, que permite, al definir la parte del repositorio sujeta a la operación de clonación, listar archivos individuales usando la sintaxis «.gitignore», que no permite usar para optimizar índices parciales.
De los demás cambios que se destacan:
- Flexibilidad mejorada en la configuración de la llamada fsync() para vaciar los cambios en el disco.
- Se agregó soporte para la estrategia de sincronización «por lotes» al parámetro «core.fsyncMethod», que acelera el trabajo cuando se escribe una gran cantidad de archivos separados al acumular cambios en el caché de reescritura vaciado por una sola llamada fsync().
- Los comandos transversales como «git log» y «git rev-list» ahora tienen la opción » –since-as-filter=X» para filtrar información sobre confirmaciones anteriores a «X».
- En el comando «git remote», al especificar el indicador «-v», se proporciona información sobre clones parciales del repositorio.
- Se agregó la configuración «transfer.credentialsInUrl», que puede tomar los valores «advertir», «morir» y «permitir». Si el parámetro «remote.<name>.url» especifica las credenciales en texto sin formato, un intento de realizar operaciones de «obtención» o «empuje» fallará si la configuración «transfer.credentialsInUrl» se establece en «die», o una advertencia si establece el valor «advertir».
- Por defecto, se utiliza la nueva implementación del modo interactivo del comando «git add -i», reescrito de Perl a C.
Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.