Git 2.36 ya fue liberado y estas son sus novedades
Después de tres meses de desarrollo se dio a conocer la nueva versión del sistema de control de código fuente distribuido «Git 2.36» uno de los sistemas de control de versiones más populares, fiables y de alto rendimiento que proporciona herramientas de desarrollo no lineal flexibles basadas en bifurcaciones y fusiones de bifurcaciones.
Para garantizar la integridad del historial y la resistencia a los cambios «retroactivos», se utiliza el hash implícito de todo el historial anterior en cada confirmación. También es posible verificar las firmas digitales de los desarrolladores de etiquetas y confirmaciones individuales.
Principales novedades de Git 2.36
En comparación con el lanzamiento anterior, se aceptaron 717 cambios en la nueva versión, preparada con la participación de 96 desarrolladores, de los cuales 26 participaron en el desarrollo por primera vez. Principales innovaciones :
La opción «–remerge-diff» se agregó a los comandos «git log» y «git show» para mostrar las diferencias entre el resultado general de la combinación y los datos reales reflejados en la confirmación después de procesar el comando «merge», que permite evaluar visualmente los cambios realizados como resultado de la resolución de conflictos de combinación. El comando habitual «git show» separa las diferentes resoluciones de conflictos con sangría, lo que dificulta la comprensión de los cambios.
Al usar la opción «–remerge-diff», las diferencias entre las resoluciones de conflictos no se separan para cada rama principal, pero se muestran las diferencias generales entre un archivo que tiene conflictos de fusión y un archivo que tiene conflictos resueltos.
Otro de los cambios que se destacan, es la flexibilidad mejorada en la personalización del comportamiento del vaciado de cachés de disco a través de la llamada a la función fsync(). El parámetro core.fsyncObjectFiles previamente disponible se ha dividido en dos variables de configuración core.fsync y core.fsyncMethod, lo que brinda la capacidad de aplicar fsync no solo a archivos de objetos (.git/objects), sino también a otras estructuras de git como referencias ( .git /refs), reflog y empaquetar archivos.
A través de la variable core.fsync, puede especificar una lista de estructuras internas de Git, después de la operación de escritura, para las cuales se llamará adicionalmente a fsync. La variable core.fsyncMethod permite seleccionar un método para vaciar la caché, por ejemplo, puede seleccionar fsync para usar la llamada del sistema del mismo nombre, o especificar solo escritura para usar la escritura diferida pendiente (escritura diferida de caché de página).
Para protegerse contra las vulnerabilidades que manipulan la sustitución de directorios .git por parte de otros usuarios en particiones compartidas, se ha fortalecido la verificación del propietario del repositorio. Ahora solo se permite ejecutar cualquier comando de git en sus propios directorios «.git». Si el directorio del repositorio es propiedad de otro usuario, se generará un error de forma predeterminada. Este comportamiento se puede deshabilitar usando la configuración de directorio seguro.
Tambien se destaca que se agregó la opción «–batch-command» al comando «git cat-file», que está destinado a generar el contenido original de los objetos Git, complementando los comandos «–batch» y «–batch-check» disponibles anteriormente con la capacidad de seleccionar de forma adaptativa el tipo de salida a través de «contenido <objeto>» para mostrar contenido o «info <objeto>» para mostrar información sobre el objeto. Además, se admite un comando de «vaciado» para vaciar el búfer de salida.
Por otra parte, se destaca que se agregó la opción «–oid-only» («–object-only») al comando «git ls-tree», que está diseñado para enumerar el contenido de un árbol de objetos que, por analogía con «–name -only», muestra solo los identificadores de objetos para simplificar las llamadas desde scripts. La opción «–format» también está implementada, lo que le permite definir su propio formato de salida combinando información de modo, tipo, nombre y tamaño.
De los demás cambios que se destacan de esta nueva versión:
- En el comando «git bisect run», se implementa la definición de no establecer el signo de un archivo ejecutable para el script y generar errores con los códigos 126 o 127 en este caso (anteriormente, si no se podía ejecutar el script, todas las revisiones eran marcados como que tienen problemas).
- Se agregó la opción «–refetch» al comando «git fetch» para obtener todos los objetos sin informar al otro lado del contenido que ya está 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.
- Los comandos «git update-index», «git checkout-index», «git read-tree» y «git clean» ahora admiten índices parciales (índice disperso) para mejorar el rendimiento y ahorrar espacio en los repositorios que realizan operaciones parciales. (pago escaso).
- Se modificó el comportamiento del comando «git clone –filter=… –recurse-submodules», que ahora conduce a la clonación parcial de submódulos (anteriormente, al ejecutar dichos comandos, el filtro se aplicaba solo al contenido principal y submódulos fueron clonados completamente sin tener en cuenta el filtro).
- Se agregó soporte para especificar filtros para la ubicación selectiva de contenido en el comando «git bundle», similar a las operaciones de clonación parcial.
- Se agregó la opción «–recurse-submodules» al comando «git branch» para atravesar submódulos recursivamente.
Userdiff ha propuesto un nuevo controlador para el lenguaje Kotlin.
Finalmente si estás interesado en poder conocer más al respecto sobre esta nueva versión de Git 2.36 puedes consultar los detalles en el siguiente enlace.