Lanzamiento del sistema de control de versiones Git 2.52

Después de tres meses de desarrollo, se presenta el lanzamiento del sistema de gestión distribuida de código fuente Git 2.52. Git se caracteriza por su alto rendimiento y proporciona herramientas para el desarrollo no lineal, basadas en la bifurcación y la fusión de ramas. Para garantizar la integridad del historial y la resistencia a los cambios retroactivos, se utiliza un hash implícito de todo el historial previo en cada commit, así como la verificación mediante firmas digitales de los desarrolladores para etiquetas y commits individuales. El código de Git se distribuye bajo la licencia GPLv2+.

En comparación con la versión anterior, en la nueva versión se han incorporado 637 cambios, preparados con la participación de 94 desarrolladores (33 participaron por primera vez en el desarrollo de Git). Principales novedades (1, 2, 3):

  • Se agrega el comando «git last-modified» para mostrar la lista de archivos en la revisión especificada y los commits a través de los cuales se realizaron los últimos cambios en cada uno de esos archivos. $ git last-modified HEAD b56f6dcd7b4c90192018e848d0810f091d092913 test.h 29330ae4b820147c98e723399e9438c8bee60a8a test1.c 573ad8917beb99dc643b6e7f5c117a294384a575 test2.c
  • Se agrega el comando «git repo» para realizar acciones relacionadas con la recuperación de información del repositorio. Se proponen dos subtareas: «git repo info» y «git repo structure», que muestran información sobre la configuración del repositorio y datos sobre la estructura del mismo (por ejemplo, se puede conocer el número de referencias y objetos en el repositorio). $ git repo info object.format references.format object.format=sha1 references.format=reftable $ git repo structure | Estructura del repositorio | Valor | | ——————— | —— | | * Referencias | | | * Contador | 1983 | | * Ramas | 4 | | * Etiquetas | 1125 | | * Remotos | 854 | | * Otros | 0 | | | | * Objetos alcanzables | | | * Contador | 518955 | | * Commits | 77469 | | * Árboles | 188865 | | * Blobs | 251631 | | * Etiquetas | 990 |
  • Se añaden tres subtareas al comando «git refs», que unifican las operaciones de bajo nivel dispares y superpuestas sobre las referencias (git for-each-ref, git show-ref, git update-ref y git pack-refs):
    • «git refs optimize» — optimización del backend de almacenamiento de referencias (similar a «git pack-refs»).
    • «git refs list» — muestra una lista de todas las referencias (similar a «git for-each-ref» o «git show-ref»).
    • «git refs exists» — verifica la existencia de una referencia (similar a «git show-ref —exists»).
  • El formato para la exportación o importación del historial de commits se ha ampliado con la capacidad de trabajar con firmas criptográficas, utilizando tanto identificadores de objetos basados en el algoritmo SHA-1 como en SHA-256. En el comando «git fast-import» se ha implementado el soporte para el procesamiento de etiquetas firmadas, similar a los commits firmados. Se han añadido las opciones «—signed-commits=<modo>» y «—signed-tags=<modo>» para gestionar el procesamiento de commits y etiquetas firmadas en la etapa de importación (el modo puede tomar valores verbatim, warn-verbatim, warn-stri, strip o abort).
  • En el comando «git maintenance» se ha añadido el soporte para una nueva estrategia «geometric» («git config set maintenance.strategy geometric»), que permite reducir el tiempo de mantenimiento de grandes monorepositorios. En comparación con la estrategia previamente disponible, que utilizaba la lógica en el comando «git gc», la nueva estrategia evita la reempaquetación de todos los objetos y excluye operaciones excesivamente costosas en recursos, como la fusión de todos los archivos de paquete (cuando es posible, la fusión se realiza en partes y sin limpieza de objetos eliminados).
  • Se ha añadido el comando «git sparse-checkout clean» para simplificar la restauración del estado del directorio de trabajo, eliminando archivos que no coinciden con la nueva definición de sparse-checkout y que no deberían estar presentes en la copia local según los parámetros actuales de sparse-checkout.
  • Para eliminar complicaciones de la base de código y simplificar el mantenimiento, se ha realizado una refactorización para reducir el uso de la variable global the_repository.
  • Se ha ampliado la aplicación de los filtros de Bloom, una estructura probabilística para verificar la pertenencia a un conjunto, que permite una identificación errónea de un elemento ausente, pero excluye pasar por alto un elemento existente. Los filtros de Bloom ahora se aplican para acelerar la búsqueda en el historial de cambios cuando se especifican máscaras en las rutas de los archivos, por ejemplo, «foo/bar/*/baz».
  • El rendimiento del comando «git describe» se ha incrementado en un 30%, gracias al uso de una cola de prioridad. En «git remote rename» se han acelerado las operaciones de renombrado de referencias. En «git ls-files» se ha ampliado la aplicación de índices. Se ha acelerado notablemente el trabajo del comando «git log -L», gracias a la eliminación de comparaciones innecesarias de tres niveles durante el procesamiento de merges de commits. Se han realizado optimizaciones en la biblioteca xdiff.
  • Se ha proporcionado la opción de utilizar implementaciones en el lenguaje Rust para algunas funciones internas, como la codificación y decodificación de valores enteros de longitud variable. Por defecto, el código en Rust no se utiliza y su inclusión requiere la especificación de la bandera de compilación WITH_RUST. En el futuro, se anticipa una reescritura en Rust de componentes internos más significativos de Git y la adición de Rust a las dependencias de compilación obligatorias en Git 3.0.
  • Se ha actualizado la lista de cambios incompatibles que se aplicarán en la rama Git 3.0. En Git 3.0 se ha decidido cambiar la configuración init.defaultBranch por defecto al valor 'main', es decir, en los repositorios creados con el comando 'git init', la rama por defecto se llamará 'main' en lugar de 'master'. También se destaca el cambio por defecto a identificadores de objetos basados en el algoritmo de hash SHA-256 al inicializar nuevos repositorios. Para facilitar la portabilidad entre repositorios con identificadores de objetos basados en hashes SHA-1 y SHA-256, se proporciona la posibilidad de realizar operaciones de push y pull desde un repositorio que utiliza otro algoritmo de hash.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster