Git 2.31 ya está disponible y llega con git maintenance
Hace pocos dias se dio a conocer la liberación de la nueva versión de Git 2.3, uno de los sistemas de control de versiones más populares, confiables y de alto rendimiento, que proporciona herramientas de desarrollo no lineales flexibles basadas en ramificaciones y fusiones.
En comparación con la versión anterior, se adoptaron 679 cambios en la nueva versión, preparada con la participación de 85 desarrolladores, de los cuales 23 participaron en el desarrollo por primera vez.
Principales novedades de Git 2.31
En esta nueva versión de Git 2.31 se destaca la adición del comando «git maintenance» que permite el trabajo periódico en sistemas que no admiten cron. Por ejemplo, con el nuevo comando, puede hacer arreglos para iniciar periódicamente el proceso de empaquetado del repositorio para no tener que esperar a que se complete el bloqueo del repositorio cuando el empaquetado se realiza automáticamente cuando se ejecutan varios comandos.
Otro de los cambios que se destaca, es que se agregó soporte para mantener un índice inverso en el disco (revindex) para los archivos de paquetes, ya que Git almacena todos los datos en forma de objetos, que se almacenan en archivos separados. Para mejorar la eficiencia de trabajar con el repositorio, los objetos se colocan adicionalmente en archivos de paquete, en los que la información se presenta en forma de un flujo de objetos que se siguen uno tras otro.
Para cada paquete-archivo, se crea un archivo de índice (.idx), que permite usar el identificador de objeto para determinar muy rápidamente el desplazamiento en el paquete-archivo en el que se almacena este objeto. El índice inverso (.rev) propuesto en Git 2.31 tiene como objetivo optimizar el proceso de determinación de un identificador de objeto a partir de información sobre la ubicación del objeto en un archivo de paquete.
Anteriormente, dicha conversión se realizaba sobre la marcha durante el análisis de un archivo de paquete y se almacenaba solo en la memoria, lo que no permitía la reutilización de dichos índices y obligaba a generar el índice cada vez. La operación de construir un índice se reduce a construir una matriz de pares de posición de objeto y clasificarla por posición, lo que puede llevar mucho tiempo para archivos de paquetes grandes.
Por otra parte, podremos encontrar que se agregaron optimizaciones de rendimiento basadas en la apariencia en el formato de archivo del gráfico de confirmación, que se usa para optimizar el acceso a la información sobre las confirmaciones, nuevos datos sobre el número de generación de las confirmaciones, que se pueden usar para acelerar las operaciones adicionales con las confirmaciones.
Además, se agregó la capacidad de anular el nombre de rama predeterminado en nuevos repositorios (configuración init.defaultBranch). Al acceder a repositorios externos, git intenta verificar la rama a la que apunta HEAD, es decir, si el servidor externo está usando la rama «main» por defecto, entonces la operación «git clone» intentará buscar «main» localmente.
De los demás cambios que se destacan:
- La opción «–disk-use» se ha agregado al comando «git rev-list» para mostrar un resumen del tamaño de los objetos.
- Se eliminó el soporte para la biblioteca de expresiones regulares obsoleta PCRE1.
- Se proporcionó la capacidad de prohibir enérgicamente el uso de atajos, actuando independientemente del algoritmo hash. La prohibición se habilita asignando el valor «no» al parámetro core.abbrev.
- La opción «–path-format se ha agregado al comando «git rev-parse» para definir explícitamente la salida de rutas relativas o absolutas.
- Los scripts de autocompletado de Bash facilitan la adición de reglas de finalización para los subcomandos personalizados «git».
- Se agregó la opción «–stdin» al comando «git bundle» para leer enlaces del flujo de entrada estándar.
- Las opciones «–left-only» y «–right-only» se han agregado al comando «git range-diff» para mostrar solo un lado del rango comparado.
- Se agregó la opción «–skip-to=<ruta>» al comando «git difftool» para reanudar una sesión interrumpida desde una ruta arbitraria.
- El Código de Conducta (Código de conducta), que define los principios básicos para la resolución de conflictos entre desarrolladores, ha sido actualizado a la versión 2.0 (anteriormente se utilizaba la versión 1.4).
Finalmente si quieres conocer más al respecto, puedes consultar el siguiente enlace.