Lanzamiento de control de fuente Git 2.48

Se ha publicado la versión 2.48 del sistema de control de fuente distribuido Git. Git es altamente productivo y proporciona capacidades de desarrollo no lineal basadas en ramificación y fusión. Para garantizar la integridad del historial y la resistencia a cambios retroactivos, se utiliza un hash implícito de todo el historial anterior en cada confirmación, así como firmas digitales de etiquetas y confirmaciones individuales por parte de los desarrolladores. El código Git se distribuye bajo la licencia GPLv2+.

En comparación con la versión anterior, la nueva versión incluye 605 cambios preparados con la participación de 93 desarrolladores, 35 de los cuales participan en el desarrollo por primera vez. Principales innovaciones:

  • Se implementó la capacidad de construir utilizando el sistema de construcción Meson, además de GNU Make y CMake. Para construir Git, ahora puedes usar el comando "meson setup build && ninja -C build". Se observa que el Makefile utilizado al utilizar GNU Make ha crecido a 3887 líneas y no es tan simple como uno quisiera. El kit de herramientas 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 discontinuar el soporte para Make y CMake en el futuro cercano.
  • Se agregaron opciones de compilación para permitir el uso de implementaciones de hash SHA-1 alternativas al calcular sumas de verificación utilizadas para verificar la integridad de los bloques de datos en los archivos de paquete. El rendimiento del cálculo de la suma de comprobación es de gran importancia, por ejemplo, aproximadamente el 78% del tiempo del procesador se gasta en su cálculo cuando se clona un repositorio con un kernel de Linux. La implementación predeterminada incluye verificación de colisiones adicional y protección contra ataques SHA-1 como SHAttered y Shambles. Este tipo de protección, que requiere recursos adicionales, sólo tiene sentido cuando se utiliza SHA-1 para 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 ejecutar el comando "merge". procesado. Al utilizar la opción "--remerge-diff", las diferencias entre las resoluciones de conflictos no se dividen para cada rama principal, sino que se muestran las diferencias generales entre el archivo que tiene conflictos de fusión y el archivo donde se resuelven los conflictos. En el contexto del comando "range-diff", la nueva opción puede ser útil para comparar conjuntos de confirmaciones después de migrar una secuencia de confirmaciones con el comando "rebase" con la opción "--rebase-merges".
  • Se agregó la capacidad de ejecutar el conjunto de pruebas de Git con el modo de detección de fugas de memoria habilitado. Dado que Git proporciona utilidades que salen una vez completada la función llamada, las pérdidas de memoria antes no se consideraban un gran problema. La necesidad de eliminar por completo las fugas de memoria se volvió relevante después de que se comenzó a trabajar en trasladar la funcionalidad interna a una biblioteca separada que pueda usarse en procesos de larga ejecución.
  • Ya se ha empezado a formar la lista de modos y características obsoletos que se planea descontinuar en el futuro. Se espera que la eliminación de la funcionalidad obsoleta ocurra en la versión Git 3.0, que incluirá cambios que afectarán versiones anteriores.
  • Optimización continua del comando "git for-each-ref", que enumera las referencias en un repositorio. La optimización que combina controladores para el filtrado de enlaces y el formato de salida ahora se aplica no sólo a la salida sin ordenar, sino también cuando se especifica la opción "--sort".
  • Implementación mejorada del backend "reftable" con almacenamiento en bloques 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 referencias. La nueva versión elimina las llamadas a algunas API auxiliares para eliminar aún más la biblioteca libgit de las dependencias de compilación. Se implementó el manejo adaptativo de errores devueltos por funciones de asignación de memoria (la falta de memoria ya no conduce a una terminación anormal). Se han acelerado las operaciones de creación de enlaces y se ha reducido el consumo de memoria.
  • Se ha corregido la implementación de clonación parcial, que podía provocar que el repositorio se bloqueara y se corrompiera 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 se refiere, "refs/remotes/ /HEAD" ahora se redirige a esta rama. Para gestionar 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.
  • Los comandos 'git notes add' y 'git notes append' ahora tienen un indicador '-e' 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