Lanzamiento del sistema de control de código fuente distribuido Git 2.31

El sistema de control de código fuente distribuido Git 2.31 ya está disponible. Git es uno de los sistemas de control de versiones más populares, confiables y de alto rendimiento, y proporciona herramientas de desarrollo no lineales flexibles basadas en ramificaciones y fusiones. Para garantizar la integridad del historial y la resistencia a cambios retroactivos, en cada confirmación se utiliza el hash implícito de todo el historial anterior; también es posible certificar etiquetas individuales y confirmaciones con firmas digitales de los desarrolladores.

En comparación con la versión anterior, la nueva versión incluyó 679 cambios, elaborados con la participación de 85 desarrolladores, de los cuales 23 participaron en el desarrollo por primera vez. Principales innovaciones:

  • Se agregó el comando "mantenimiento git", que le permite realizar trabajos periódicos en sistemas que no admiten cron. Por ejemplo, utilizando un nuevo comando, puede organizar que el proceso de empaquetado del repositorio se ejecute periódicamente, de modo que no tenga que esperar hasta que el repositorio esté bloqueado cuando el empaquetado se realiza automáticamente mientras se ejecutan varios comandos. El comando "mantenimiento de git" le permite realizar optimizaciones y operaciones para mantener la estructura óptima del repositorio en segundo plano, sin bloquear la sesión interactiva; una vez por hora, se trabaja para descargar proactivamente objetos nuevos del repositorio remoto y actualizar el archivo con el gráfico de confirmación, y el proceso de empaquetar el repositorio comienza cada noche.
  • Se agregó soporte para mantener un índice inverso (revindex) en el disco para archivos de paquete. Recuerde que Git almacena todos los datos en forma de objetos, que se encuentran en archivos separados. Para aumentar la eficiencia del trabajo con el repositorio, los objetos se colocan adicionalmente en archivos de paquete, en los que la información se presenta en forma de una secuencia de objetos uno tras otro (se usa un formato similar al transferir objetos con git fetch y git push comandos). Para cada archivo de paquete, se crea un archivo de índice (.idx), que le permite determinar muy rápidamente el desplazamiento en el archivo de paquete en el que se almacena el objeto determinado utilizando el identificador de objeto. Introducido en Git 2.31, el índice inverso (.rev) tiene como objetivo optimizar el proceso de determinación de un identificador de objeto a partir de información sobre la ubicación de un objeto en un archivo de paquete.

    Anteriormente, dicha conversión se realizaba sobre la marcha mientras se analizaba el archivo del paquete y se almacenaba solo en la memoria, lo que no permitía reutilizar índices similares y obligaba a generar el índice cada vez. La operación de crear un índice se reduce a construir una matriz de pares de posición de objeto y ordenarlos por posición, lo que puede llevar mucho tiempo para archivos de paquetes grandes.

    Por ejemplo, una operación para mostrar el contenido de objetos, que utiliza un índice directo, fue 62 veces más rápida que una operación para mostrar el tamaño de objetos, para la cual los datos de posición a objeto no estaban indexados. Después de utilizar el índice inverso, estas operaciones empezaron a tardar aproximadamente el mismo tiempo. Los índices inversos también le permiten acelerar las operaciones de envío de objetos al ejecutar comandos de búsqueda y envío transfiriendo directamente datos listos para usar desde el disco. De forma predeterminada, los índices inversos no se crean; para generarlos, debe habilitar la configuración "git config pack.writeReverseIndex true" y luego empaquetar el repositorio con el comando "git repack -Ad".

  • Se agregaron optimizaciones de rendimiento basadas en la apariencia en el formato de archivo de 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 confirmaciones, que se pueden usar para acelerar operaciones adicionales con confirmaciones.
  • Se agregaron opciones para redefinir el nombre de la rama principal utilizada de forma predeterminada en los nuevos repositorios (configuración init.defaultBranch). Al acceder a repositorios externos, git intenta verificar la rama señalada por HEAD, es decir. Si el servidor externo usa la rama "principal" de forma predeterminada, entonces la operación "git clone" intentará verificar "principal" localmente. Git 2.31 ahora admite este tipo de pago para repositorios vacíos. Por ejemplo, al clonar un nuevo repositorio localmente antes de agregarle los primeros parches, la copia local ahora contendrá el nombre ascendente predeterminado establecido en el servidor externo.
  • Se agregó una opción --disk-usage al comando "git rev-list" para proporcionar un resumen del tamaño de los objetos.
  • En previsión del próximo cambio en el backend de fusión, la detección de cambios de nombre se ha optimizado significativamente.
  • Se ha interrumpido la compatibilidad con la biblioteca de expresiones regulares PCRE1 heredada.
  • Es posible prohibir por la fuerza el uso de enlaces acortados, independientemente del algoritmo hash. La prohibición se habilita asignando el valor “no” al parámetro core.abrev.
  • Se agregó la opción "--path-format=(absolute|relative)" al comando "git rev-parse" para especificar explícitamente si se deben generar rutas relativas o absolutas.
  • Los scripts de finalización de Bash facilitan la adición de reglas de finalización para sus propios subcomandos "git".
  • Se agregó una opción --stdin al comando "git bundle" para leer referencias del flujo de entrada estándar.
  • Se ha agregado una nueva opción al comando "git log": "--diff-merges=" "
  • Se agregó la opción "--deduplicatecan" al comando "git ls-files" para eliminar la salida duplicada.
  • Se agregaron nuevas máscaras para excluir una variedad de confirmaciones: " ^!” Y " ^- "
  • Se agregaron las opciones "--left-only" y "--right-only" al comando "git range-diff" para mostrar solo un lado del rango que se está comparando.
  • Se agregaron opciones --skip-to= a los comandos "git diff" y "git log" " y "—rotar-a= » para saltar o moverse al final de los caminos iniciales.
  • Se agregó la opción "--skip-to=" al comando "git difftool" » para reanudar una sesión interrumpida desde una ruta aleatoria.
  • El Código de conducta, que define los principios básicos para la resolución de situaciones de conflicto entre desarrolladores, se actualizó a la versión 2.0 (anteriormente se utilizaba la versión 1.4).

    Fuente: opennet.ru

Añadir un comentario