Después de tres meses de desarrollo, se ha publicado la versión del sistema de control de versiones distribuido Git 2.36. Git es uno de los sistemas de control de versiones más populares, confiables y de alto rendimiento, que ofrece herramientas flexibles para el desarrollo no lineal, basadas en bifurcaciones y fusiones de ramas. Para garantizar la integridad del historial y la resistencia a los cambios 'retroactivos', se utiliza un hashing implícito de todo el historial anterior en cada commit, además, es posible autenticar digitalmente las firmas de los desarrolladores en etiquetas y commits individuales.
En comparación con la versión anterior, se han aceptado 717 cambios en la nueva versión, preparados con la participación de 96 desarrolladores, de los cuales 26 participaron por primera vez en el desarrollo. Principales novedades:
- Se ha añadido la opción '—remerge-diff' a los comandos 'git log' y 'git show', que permite mostrar las diferencias entre el resultado general de la fusión y los datos reales reflejados en el commit después de procesar el comando 'merge', lo que facilita la evaluación de los cambios realizados como resultado de la resolución de conflictos durante la fusión. El comando 'git show' habitual separa diferentes resoluciones de conflictos con sangrías, lo que dificulta la comprensión de los cambios. Por ejemplo, en la captura de pantalla a continuación, las líneas '+/-' sin sangría muestran la última resolución de conflicto relacionada con el cambio de nombre en la primera rama de sha1 a oid en el comentario, mientras que '+/-' con sangría muestra la resolución inicial del conflicto, causada por la aparición de un argumento adicional en la función dwim_ref() en la segunda rama.

Al utilizar la opción '—remerge-diff', las diferencias entre las resoluciones de conflictos no se separan para cada rama principal, sino que se muestran las diferencias generales entre el archivo que tiene conflictos de fusión y el archivo en el cual los conflictos han sido resueltos.

- Se ha mejorado la flexibilidad en la configuración del comportamiento de restablecimiento de cachés en disco a través de la llamada a la función fsync(). El parámetro previamente disponible core.fsyncObjectFiles se ha dividido en dos variables de configuración core.fsync y core.fsyncMethod, que ofrecen la capacidad de aplicar fsync no solo a los archivos de objetos (.git/objects), sino también a otras estructuras de git, como referencias (.git/refs), reflog y archivos de paquetes.
A través de la variable core.fsync se puede especificar una lista de estructuras internas de Git para las cuales se invocará fsync adicionalmente después de una operación de escritura. La variable core.fsyncMethod permite seleccionar el método para vaciar la caché, por ejemplo, se puede elegir fsync para aplicar la llamada al sistema del mismo nombre o especificar writeout-only para aplicar la escritura diferida (escritura en caché de páginas).
- Para protegerse contra vulnerabilidades que manipulan la sustitución de otros usuarios de los directorios .git en particiones compartidas, se ha reforzado la verificación del propietario del repositorio. La ejecución de cualquier comando git ahora solo se permite en sus propios directorios '.git'. Si el directorio del repositorio pertenece a otro usuario, se mostrará un error de forma predeterminada. Este comportamiento se puede desactivar mediante la configuración safe.directory.
- En el comando 'git cat-file', destinado a mostrar el contenido original de los objetos de Git, se ha añadido la opción '--batch-command', que complementa los comandos ya disponibles '--batch' y '--batch-check' con la posibilidad de seleccionar el tipo de salida de forma adaptativa al especificar 'contents ' para mostrar el contenido o 'info ' para mostrar información sobre el objeto. También se ha añadido el comando 'flush' para vaciar el búfer de salida.
- En el comando 'git ls-tree', destinado a generar una lista del contenido del árbol de objetos, se ha añadido la opción '--oid-only' ('--object-only'), similar a '--name-only', que solo muestra los identificadores de los objetos para facilitar su llamada desde scripts. También se ha implementado la opción '--format' que permite definir un formato de salida personalizado, combinando información sobre el modo, tipo, nombre y tamaño.
- En el comando 'git bisect run' se ha implementado la determinación de la no presentación de un script como ejecutable y la salida en este caso de errores con códigos 126 o 127 (anteriormente, si un script no se podía ejecutar, todas las revisiones se marcaban como problemáticas).
- En el comando 'git fetch' se ha añadido la opción '--refetch' para extraer todos los objetos sin informar a la otra parte sobre el contenido que ya se tiene en el sistema local. Este comportamiento puede ser útil para restaurar el estado después de fallas, cuando no hay certeza sobre la integridad de los datos locales.
- En los comandos «git update-index», «git checkout-index», «git read-tree» y «git clean» se ha añadido soporte para índices parciales (sparse index), lo que permite mejorar el rendimiento y ahorrar espacio en repositorios donde se realizan operaciones de clonación parcial (sparse-checkout).
- Se ha cambiado el comportamiento del comando «git clone —filter=… —recurse-submodules», que ahora resulta en la clonación parcial de submódulos (anteriormente, al ejecutar comandos similares, el filtro se aplicaba solo al contenido principal, y los submódulos se clonaban completamente sin tener en cuenta el filtro).
- En el comando «git bundle» se ha añadido soporte para especificar filtros para la inclusión selectiva de contenido, análogamente a las operaciones de clonación parcial.
- Se ha añadido la opción «—recurse-submodules» al comando «git branch» para la recorrida recursiva de submódulos.
- Se ha propuesto un nuevo procesador para el lenguaje Kotlin en userdiff.
Fuente: opennet.ru


