Lanzamiento de control de fuente Git 2.37

Se ha anunciado el lanzamiento del sistema de control de código fuente distribuido Git 2.37. 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, se utiliza el hash implícito de todo el historial anterior en cada confirmación, y también es posible certificar etiquetas individuales y confirmaciones con firmas digitales de los desarrolladores.

En comparación con la versión anterior, en la nueva versión, preparada con la participación de 395 desarrolladores, se adoptaron 75 cambios, de los cuales 20 participaron en el desarrollo por primera vez. Principales innovaciones:

  • El mecanismo de índices parciales (índice disperso), que cubre sólo una parte del repositorio, está listo para su uso generalizado. Los índices parciales pueden mejorar el rendimiento y ahorrar espacio en repositorios que realizan operaciones de clonación parcial (desprotección dispersa) o trabajan con una copia incompleta del repositorio. La nueva versión completa la integración de índices parciales en los comandos git show, git sparse-checkout y git stash. El beneficio de rendimiento más notable al usar índices parciales se ve con el comando git stash, que ha experimentado un aumento del 80 % en la velocidad de ejecución en algunas situaciones.
  • Se ha implementado un nuevo mecanismo de "paquetes crudos" para empaquetar objetos inalcanzables a los que no se hace referencia en el repositorio (no se hace referencia a ellos mediante ramas o etiquetas). El recolector de basura elimina los objetos inalcanzables, pero permanecen en el repositorio durante un tiempo determinado antes de eliminarlos para evitar condiciones de carrera. Para rastrear el período de aparición de objetos inalcanzables, es necesario adjuntarles etiquetas con la hora de cambio de objetos similares, lo que no permite almacenarlos en un archivo de paquete en el que todos los objetos tienen una hora de cambio común. Anteriormente, guardar cada objeto en un archivo separado generaba problemas cuando había una gran cantidad de objetos nuevos e inalcanzables que aún no eran elegibles para su eliminación. El mecanismo propuesto de "paquetes crudos" le permite almacenar todos los objetos inalcanzables en un archivo de paquete y reflejar los datos sobre el tiempo de modificación de cada objeto en una tabla separada almacenada en un archivo con la extensión ".mtimes".
  • Para Windows y macOS, existe un mecanismo integrado para rastrear cambios en el sistema de archivos, lo que le permite evitar iterar sobre todo el directorio de trabajo al realizar operaciones como "estado de git". Anteriormente, para rastrear cambios, se podían conectar utilidades externas para rastrear cambios en el FS, como Watchman, a través de ganchos, pero esto requería la instalación de programas y configuraciones adicionales. Ahora la funcionalidad especificada está integrada y se puede habilitar con el comando "git config core.fsmonitor true".
  • En el comando “git sparse-checkout”, se ha declarado obsoleto el soporte para una alternativa al modo “—cone”, el método de definir plantillas para la clonación parcial, lo que permite, al determinar la parte del repositorio que está sujeta a la operación de clonación, para enumerar archivos individuales utilizando la sintaxis “.gitignore”, que no permite el uso de índices parciales para la optimización.
  • Mayor flexibilidad en la configuración de la llamada fsync() para vaciar los cambios en el disco. Se agregó soporte para la estrategia de sincronización "por lotes" al parámetro "core.fsyncMethod", que permite acelerar el trabajo al escribir una gran cantidad de archivos individuales al acumular cambios en el caché de reescritura, que se restablece mediante un solo fsync() llamar. La prueba, que resultó en la adición de 500 archivos usando el comando "git add", se completó en 0.15 segundos cuando se habilitó el nuevo modo, mientras que llamar a fsync() tomó 1.88 segundos para cada archivo y sin usar fsync - 0.06 segundos.
  • Los comandos de recorrido de rama como "git log" y "git rev-list" ahora tienen una opción "-since-as-filter=X" que le permite filtrar información sobre confirmaciones anteriores a "X". A diferencia de la opción “—since”, el nuevo comando se implementa como un filtro que no detiene la búsqueda después de la primera confirmación anterior al tiempo especificado.
  • En el comando "git remoto", al especificar el indicador "-v", se muestra información sobre clones parciales del repositorio.
  • Se agregó la configuración "transfer.credentialsInUrl", que puede tomar los valores "advertir", "morir" y "permitir". Si se especifica en el parámetro “remoto. .url", al intentar realizar una operación de "búsqueda" o "envío" se producirá un error si la configuración "transfer.credentialsInUrl" está configurada en "morir", o una advertencia si está configurada en "advertir".
  • De forma predeterminada, está habilitada la nueva implementación del modo interactivo del comando “git add -i”, reescrito de Perl a C.

Fuente: opennet.ru

Añadir un comentario