Git 2.55

Presentado lanzamiento del sistema distribuido de gestión de textos fuente Git 2.55. Entre los principales cambios: inclusión por defecto de la compilación con Rust, implementación para Linux del proceso fsmonitor, nueva estrategia de reempaquetado del índice MIDX incremental, comando git history fixup para corrección de commits, optimización en la generación de mapas de disponibilidad de objetos, soporte para la ejecución paralela de hooks, comando git format-rev. Código de Git se distribuye bajo la licencia GPLv2+.

Comparado con la versión anterior, se han aceptado 505 cambios en la nueva versión, preparados con la participación de 100 desarrolladores, 33 de los cuales han participado por primera vez en el desarrollo de Git.

Novedades principales (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • funciona hasta que se finalice manualmente. Por lo tanto, puede ser útil la opción incluida soporte para componentes en el lenguaje Rust. El compilador rustc se ha agregado entre las dependencias de compilación. Para compilar sin Rust se puede utilizar la bandera NO_RUST=1 al ejecutar la utilidad make o -Drust=disabled al realizar meson configure. La capacidad de deshabilitar la compilación con Rust se mantendrá hasta la rama Git 3.0, donde Rust será activado una de las dependencias obligatorias. En Rust se ha implementado una capa para la portabilidad entre configuraciones con hash SHA-1 y SHA-256, así como algunas funciones internas, como la codificación y decodificación de valores enteros de longitud variable. Se espera que en el futuro se reescriban en Rust componentes internos más significativos de Git.
  • En el equipo experimental "git history", que proporciona capacidades para reescribir la historia de cambios, se ha agregado la operación «git history fixup» para corregir el commit. La operación fixup permite trasladar cambios añadidos a través de git add a un commit anterior y reescribir automáticamente todos los commits subsiguientes, como si se ejecutara el comando git commit —fixup=<commit> y se iniciara git rebase —autosquash <commit>~.
  • Para la plataforma Linux se ha implementado un proceso en segundo plano fsmonitor, que rastrea cambios en el sistema de archivos mediante el mecanismo inotify y que permite evitar la revisión completa de todo el directorio de trabajo al ejecutar comandos como git status. La activación se realiza a través de la configuración «core.fsmonitor».
  • Se ha añadido el modo —write-midx=incremental al comando git repack, que implementa una nueva estrategia para actualizar metadatos en el índice MIDX incremental (índice de múltiples paquetes), permitiendo evitar la recompresión de todo el índice. En el índice de múltiples paquetes incremental, en lugar de un único gran índice que contiene información sobre la distribución de objetos en archivos de paquete, se utiliza una separación en capas: cada capa cubre un cierto número de archivos de paquete y se almacena en un archivo bitmap separado. Esta estructura permite añadir datos sobre objetos en nuevos archivos de paquete al índice, adjuntando nuevas capas sin reconstruir las ya existentes. El comando git repack —write-midx=incremental permite añadir una nueva capa al índice MIDX incremental que abarca archivos de paquete recién creados. Combinado con el modo de empaquetado de repositorios —geometric, este nuevo comando ofrece la posibilidad de combinar nuevos objetos de varios archivos de paquete en un único archivo de paquete más grande y, si es necesario, empaquetar y fusionar varias capas adyacentes del índice MIDX incremental. Esta estrategia permite, al ejecutar git repack, sobrescribir solo las capas superiores, dejando intactas las capas grandes más antiguas, así como evitar un crecimiento descontrolado de la cadena de capas, manteniendo el número total de capas a un nivel proporcional al logaritmo del número total de objetos.
  • Se ha optimizado significativamente la generación de bitmaps de disponibilidad de objetos gracias a un nuevo algoritmo de recorrido del árbol de objetos, que excluye la recursión innecesaria, el almacenamiento en caché de las posiciones de objetos, la ordenación de bitmaps antes de su combinación mediante la operación XOR y la reestructuración del código para la creación de bitmaps de pseudofusión (pseudo-merge). En el repositorio de prueba, las optimizaciones han reducido el tiempo de generación de bitmaps de 612 a 294 segundos.
  • Se ha implementado la capacidad de ejecutar de forma paralela ganchos independientes ganchos en los archivos de configuración. No se pueden ejecutar simultáneamente los ganchos que afectan al estado compartido o que lo tienen en cuenta, como los que cambian los comentarios de los commits o inspeccionan los índices y el árbol de trabajo. Sin embargo, se pueden ejecutar simultáneamente ganchos para verificación con linters y ejecución de pruebas unitarias. Los ganchos que permiten la ejecución en paralelo se configuran mediante el parámetro hook.nombre_del_gancho.parallel = true. El número de trabajos que se inician simultáneamente se determina mediante la configuración hook.jobs, hook.<evento>.jobs o la opción de línea de comandos -j.
  • En el equipo git pack-objects, se ha implementado el recorrido por la ruta con la capacidad de especificar filtros como blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> y combine:. En la prueba realizada, la exclusión de blobs al ejecutar —path-walk permitió reducir en un 16% el tamaño del archivo pack generado.
  • Se ha añadido el comando git format-rev para dar formato a revisiones y nombres de objetos mencionados en listas de commits o que aparecen en texto arbitrario (por ejemplo, se puede utilizar en ganchos para procesar comentarios de commits).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • Por defecto, se ha habilitado el escape de la mayoría de las secuencias de control de terminal en los mensajes informativos y el texto de errores transmitidos por el servidor. Al interactuar con un servidor malicioso, dichas secuencias de escape podrían utilizarse para ocultar o modificar la salida, por ejemplo, mediante secuencias de escape para mover el cursor y limpiar el texto. Se mantiene el soporte para secuencias de escape para resaltar elementos en color.
  • El comando git checkout -m ahora guarda automáticamente los cambios locales en conflicto en el área de stash sin necesidad de resolver el conflicto inmediatamente.
  • Se ha añadido a git push la posibilidad de enviar ramas a varios servidores Git externos con un solo comando. Por ejemplo, para enviar la rama main no solo al servidor principal, sino también a los espejos, se puede crear un grupo de publicación con servidores como github, gitlab y mirror:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Se ha añadido a git log —graph la opción —graph-lane-limit=<N> para limitar el número de barras verticales al visualizar ramas, lo que permite dejar espacio en la pantalla para los datos sobre commits en repositorios con un gran número de ramas.

…
* | | | | 619931f561 Fusionar la rama ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: simplificar la comparación GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: limpiar GIT_GNUC_PREREQ() y UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrar pathspec antes de lstat

  • Se ha añadido a los comandos git log y git rev-list la opción —max-count-oldest=, que permite seleccionar los N commits más antiguos en el rango.

Fuente: linux.org.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