Se ha lanzado el sistema de control de código fuente distribuido Git 2.48. Git es muy productivo y proporciona herramientas de desarrollo no lineales basadas en ramificaciones y fusiones. Para garantizar la integridad del historial y la resistencia a cambios retroactivos, se utiliza el hash implícito de todo el historial anterior en cada confirmación, así como firmas digitales de los desarrolladores de etiquetas y confirmaciones individuales. El código Git se distribuye bajo la licencia GPLv2+.
En comparación con la versión anterior, la nueva versión contiene 605 cambios preparados con la participación de 93 desarrolladores, de los cuales 35 participan en el desarrollo por primera vez. Principales innovaciones:
- Implementé la capacidad de compilar utilizando el sistema de compilación Meson, además de GNU Make y CMake. Para compilar Git ahora puedes usar el comando "meson setup build && ninja -C build". Cabe señalar que el Makefile utilizado al usar GNU Make ha crecido a 3887 líneas y no es tan simple como nos gustaría. El conjunto de herramientas de Meson simplifica el sistema de compilación, es conveniente para compilaciones multiplataforma y hace que la compilación sea más accesible para principiantes o desarrolladores que no tienen experiencia con la utilidad Make. No hay planes de suspender el soporte para Make y CMake en el futuro previsible.
- Se agregaron opciones de compilación para permitir el uso de implementaciones alternativas del hash SHA-1 al calcular las sumas de verificación utilizadas para verificar la integridad de los bloques de datos en los archivos del paquete. El rendimiento de los cálculos de suma de comprobación es de gran importancia; por ejemplo, aproximadamente el 78% del tiempo de la CPU se dedica a su cálculo al clonar un repositorio con el kernel de Linux. La implementación predeterminada incluye controles de colisión adicionales y protección contra ataques SHA-1 como SHAttered y Shambles. Esta protección, que consume recursos adicionales, sólo tiene sentido cuando se utiliza SHA-1 con fines criptográficos y es inútil cuando se comprueba la integridad de los datos del índice.
Para construir Git con una implementación SHA-1 más rápida que no sea adecuada para criptosistemas, se proponen una serie de opciones *_UNSAFE, por ejemplo, "OPENSSL_SHA1_UNSAFE". En GitHub, la construcción con SHA-1 simplificado permitió un aumento del 10 al 13 % en el rendimiento de las operaciones de clonación y recuperación de datos.
- Se agregó la capacidad de usar la opción "-remerge-diff" en el comando "range-diff", que le permite mostrar las diferencias entre el resultado general de la fusión y los datos reales reflejados en la confirmación después de procesar el comando "fusionar". Cuando se utiliza la opción "--remerge-diff", las diferencias entre las resoluciones de conflictos no se separan para cada rama principal, pero se muestran las diferencias generales entre el archivo que tiene conflictos de fusión y el archivo que tiene los conflictos resueltos. En el contexto del comando range-diff, una nueva opción puede ser útil para comparar conjuntos de confirmaciones después de que el comando rebase haya migrado una secuencia de confirmaciones con la opción --rebase-merges.
- Se agregó la capacidad de ejecutar un conjunto de pruebas de Git con la detección de pérdida de memoria habilitada. Debido a que git proporciona utilidades que salen después de que se ejecuta la función llamada, las pérdidas de memoria no se consideraban anteriormente un gran problema. La necesidad de eliminar por completo las pérdidas de memoria se volvió urgente después de que se comenzó a trabajar para trasladar la funcionalidad interna a una biblioteca separada, que se puede utilizar en procesos de larga duración.
- Se ha comenzado a compilar una lista de modos y funciones obsoletos que se planea descontinuar en el futuro. Se espera que la funcionalidad obsoleta se elimine en la versión Git 3.0, lo que incluirá cambios que rompan la compatibilidad con versiones anteriores.
- Optimización continua del comando "git for-each-ref", que muestra una lista de enlaces en el repositorio. Una optimización que combina controladores para el filtrado de enlaces y el formato de salida ahora se aplica no solo a la salida sin ordenar, sino también cuando se especifica la opción "--sort".
- Implementación mejorada del backend "reftable" con almacenamiento en bloque para almacenar de manera eficiente referencias de ramas y etiquetas en el repositorio. Reftable le permite acelerar significativamente la búsqueda, lectura y escritura en repositorios con una gran cantidad de enlaces. La nueva versión deja de llamar a algunas API auxiliares para excluir aún más que la biblioteca libgit sea una dependencia de compilación. Se implementó un manejo adaptativo de los errores devueltos por las funciones de asignación de memoria (la memoria insuficiente ya no provoca fallas). Se han acelerado las operaciones de creación de enlaces y se ha reducido el consumo de memoria.
- La implementación de la clonación parcial resolvió los problemas que causaban bucles y corrupción en el repositorio después de ejecutar el comando "git gc".
- Al ejecutar el comando "git fetch " si no hay "refs/remotes/" en el sistema local /HEAD" y la presencia en el otro lado de la rama a la que HEAD hace referencia, "refs/remotes/ /HEAD" ahora redirige a este hilo. Para controlar la sincronización "refs/remotes/ /HEAD" con el valor HEAD en el otro lado de la conexión, se ha agregado la configuración remota. .followRemoteHEAD".
- Se agregó la configuración “remoto. .serverOption" similar a la opción de línea de comando "-serverOption= "
- El comando "git rebase --rebase-merges" garantiza que los nombres de las ramas se utilicen como etiquetas siempre que sea posible.
- Se agregó un indicador '-e' a los comandos 'git notes add' y 'git notes append', que abre la nota en un editor de texto externo especificado a través de la variable de entorno GIT_EDITOR.
- Compatibilidad mejorada con GCC 15 y el estándar C23.
- Se ha interrumpido el soporte para versiones anteriores de libcURL y Perl.
Fuente: opennet.ru