Está disponible el sistema de control de versiones Git 2.41

Después de tres meses de desarrollo, se ha publicado la versión 2.41 del sistema distribuido de control de versiones Git. Git es uno de los sistemas de control de versiones más populares, fiables y de alto rendimiento, que ofrece herramientas flexibles para el desarrollo no lineal basadas en la ramificación y fusión de ramas. 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 commit, y también es posible verificar digitalmente las firmas de los desarrolladores en etiquetas y commits individuales.

Comparado con la versión anterior, se han adoptado 542 cambios en la nueva versión, preparados con la participación de 95 desarrolladores, de los cuales 29 han participado en el desarrollo por primera vez. Las principales novedades son:

  • Se ha mejorado el manejo de objetos inalcanzables (unreachable), a los que no se hace referencia en el repositorio (no están referenciados por ramas o etiquetas). Los objetos inalcanzables son eliminados por el recolector de basura, pero permanecen en el repositorio durante un tiempo determinado antes de su eliminación para evitar condiciones de carrera. Para rastrear el periodo de existencia de objetos inalcanzables, es necesario vincular etiquetas con el tiempo de modificación de dichos objetos, lo que impide almacenarlos en un único archivo pack, donde todos los objetos tienen un tiempo de modificación común. Anteriormente, cada objeto inalcanzable se guardaba en un archivo separado, lo que causaba problemas cuando había un gran número de objetos inalcanzables recientes que aún no cumplían con los criterios de eliminación. En la nueva versión, se utiliza de forma predeterminada un mecanismo llamado 'cruft packs' para empaquetar objetos inalcanzables, lo que permite almacenar todos los objetos inalcanzables en un único archivo pack, y los datos sobre el tiempo de modificación de cada objeto se reflejan en una tabla separada, guardada en un archivo con la extensión '.mtimes' y vinculada mediante un archivo de índice con la extensión '.idx'.
    Está disponible el sistema de control de versiones Git 2.41
  • Se ha habilitado por defecto la gestión en disco del índice inverso (revindex) para archivos pack. En pruebas realizadas con el repositorio torvalds/linux, la aplicación del índice inverso permitió acelerar las operaciones de recursos intensivos como 'git push' en 1.49 veces, y operaciones simples, como calcular el tamaño de un objeto utilizando 'git cat-file --batch='% (objectsize:disk)'', en 77 veces. Los archivos ('.rev') con el índice inverso se guardarán dentro del repositorio en el directorio '.git/objects/pack'.

    Recordemos que Git almacena todos los datos en forma de objetos, que se colocan en archivos separados. Para mejorar la eficiencia al trabajar con el repositorio, los objetos se agrupan adicionalmente en archivos pack, donde la información se presenta en forma de flujo de objetos que se siguen unos a otros (un formato similar se utiliza al transmitir objetos con los comandos git fetch y git push). Para cada archivo pack se crea un archivo índice (.idx), que permite identificar rápidamente la posición en el archivo pack donde se almacena un objeto dado, utilizando su identificador.

    El nuevo índice inverso incluido en esta versión tiene como objetivo optimizar el proceso de identificación del objeto a partir de la información sobre la ubicación del objeto en el archivo pack. Anteriormente, esta conversión se realizaba sobre la marcha durante el análisis del archivo pack y solo se almacenaba en memoria, lo que impedía la reutilización de dichos índices y obligaba a generar el índice cada vez. La operación de construcción del índice se reduce a la creación de un array de pares 'objeto-posicion' y su ordenación por posición, lo cual puede llevar mucho tiempo para archivos pack grandes.

    Por ejemplo, la operación de salida del contenido de los objetos, que utiliza el índice directo, se ejecutó 62 veces más rápido que la operación de visualización del tamaño de los objetos, para la cual los datos de enlace de la posición con el objeto no estaban indexados. Tras el uso del índice inverso, las operaciones mencionadas comenzaron a llevar aproximadamente el mismo tiempo. Los índices inversos también permiten acelerar las operaciones de envío de objetos al ejecutar los comandos fetch y push mediante la transmisión directa de datos preestablecidos desde el disco.

    Está disponible el sistema de control de versiones Git 2.41
  • El protocolo 'credential helper', utilizado para transmitir credenciales al acceder a repositorios con acceso restringido, ha añadido soporte para la transmisión de encabezados WWW-Authenticate entre el controlador de credenciales y el servicio en el que se lleva a cabo la autenticación. El soporte para el encabezado WWW-Authenticate permite transmitir parámetros de ámbito OAuth para una división de acceso más granular del usuario a los repositorios y para delimitar las áreas disponibles para las solicitudes.
  • Se ha añadido a la orden for-each-ref la opción de formato «%(ahead-behind:<base>)», que permite obtener de una vez información sobre el número de confirmaciones que están presentes o ausentes en una rama determinada en relación a otra rama (cuánto está atrasada o adelantada una rama en términos de confirmaciones). Anteriormente, para obtener dicha información, era necesario ejecutar dos órdenes separadas: «git rev-list —count main..my-feature» para conocer el número de confirmaciones únicas para la rama y «git rev-list —count my-feature..main» para obtener el número de confirmaciones ausentes. Ahora, estos cálculos se pueden reducir a un solo comando, simplificando la escritura de manejadores y reduciendo el tiempo de ejecución. Por ejemplo, para mostrar ramas no fusionadas y evaluar el retraso o avance respecto a su rama principal, se puede utilizar la línea: $ git for-each-ref —no-merged=origin\/HEAD \ —format='%(refname:short) %(ahead-behind:origin\/HEAD)' \ refs\/heads\/tb\/ | column -t tb\/cruft-extra-tips 2 96 tb\/for-each-ref—exclude 16 96 tb\/roaring-bitmaps 47 3 en lugar del script anterior, que se ejecuta 17 veces más lento: $ git for-each-ref —format='%(refname:short)' —no-merged=origin\/HEAD \ refs\/heads\/tb | while read ref do ahead='$(git rev-list —count origin\/HEAD..$ref)' behind='$(git rev-list —count $ref..origin\/HEAD)' printf '%s %d %d\n' '$ref' '$ahead' '$behind' done | column -t tb\/cruft-extra-tips 2 96 tb\/for-each-ref—exclude 16 96 tb\/roaring-bitmaps 47 3
  • Se ha añadido a la orden «git fetch» la opción «—porcelain», que, al ser especificada, genera una salida en el formato «<flag> <old-object-id> <new-object-id> <local-reference>», menos legible, pero más conveniente para su interpretación en scripts.
  • Se ha añadido la configuración «fetch.hideRefs», que permite acelerar las operaciones de «git fetch» al ocultar parte de las referencias en el repositorio local durante la verificación de la fase de envío del servidor de un conjunto completo de objetos, lo que ahorra tiempo al limitar la verificación solo a servidores, de las cuales se extraen datos directamente. Por ejemplo, al realizar pruebas en un sistema con repositorios que contienen un gran número de enlaces externos rastreados, excluir todas las referencias, excepto aquellas dirigidas al servidor $remote, ha permitido reducir el tiempo de ejecución de la operación «git fetch» de 20 minutos a 30 segundos. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs\/remotes\/$remote \ fetch $remote
  • En el comando «git fsck» se ha implementado la posibilidad de verificar daños, coincidencia de sumas de verificación y la validez de los valores en los mapas de bits de disponibilidad e índices inversos.
  • En el equipo «git clone —local» se ha implementado la salida de error al intentar copiar desde un repositorio que contiene enlaces simbólicos dentro de $GIT_DIR.

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