Después de tres meses de desarrollo, se ha publicado la versión 2.46 del sistema distribuido de control de versiones Git. Git es uno de los sistemas de control de versiones más populares, confiables y de alto rendimiento, ofreciendo herramientas flexibles para el desarrollo no lineal basadas en ramificación y fusión de ramas. Para asegurar la integridad del historial y la resistencia a cambios retroactivos, se utiliza un hashing implícito de toda la historia previa en cada commit; también es posible verificar digitalmente ciertas etiquetas y commits por parte de los desarrolladores. El código de Git se distribuye bajo la licencia GPLv2+.
En comparación con la versión anterior, se han incorporado 746 cambios en esta nueva versión, realizados por 96 desarrolladores, de los cuales 31 participan por primera vez en el desarrollo. Principales novedades:
- Se ha añadido soporte experimental para un nuevo tipo de mapas de bits: el "pseudo-merge reachability bitmap", en el cual, a diferencia de la estructura "reachability bitmap", los datos sobre conjuntos de objetos relacionados con commits no se almacenan asociándolos a cada commit individual, sino a varios commits simultáneamente. Esta organización permite utilizar un solo mapa de bits al determinar objetos para commits en diferentes ramas, lo que en grandes repositorios evita la necesidad de crear numerosos mapas de bits individuales y acelera notablemente la exploración de objetos para identificar cuáles deben ser enviados al cliente durante operaciones como "git fetch", "git rev-list" y "git clone". Para habilitar este nuevo tipo de mapas de bits y definir la lógica para su selección y uso, se propone una serie de configuraciones "bitmapPseudoMerge": git config bitmapPseudoMerge.all.pattern ‘refs/(heads|tags)/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb
- Se ha implementado una nueva interfaz de línea de comandos para el comando «git config», en la que en lugar de las opciones dispersas para ver, renombrar y eliminar configuraciones y secciones, como «—get», «—get-all», «—unset» y «—remove-section», se propone un conjunto de subcomandos separados. Por ejemplo, para mostrar todas las configuraciones del repositorio ahora se puede usar el comando «git config list», y para ver el contenido de un parámetro específico — el comando «git config get ». Para filtrar los resultados adicionalmente, mediante la opción «—regexp» se puede establecer un filtro basado en una expresión regular.
- Se ha añadido soporte para nuevos campos «authtype» y «credential» en el protocolo «credential helper», que se utiliza para transmitir credenciales al acceder a repositorios con acceso restringido. Esto permite crear gestores para sistemas de autenticación HTTP que no se limitan a la verificación de nombre de usuario y contraseña, como, por ejemplo, al utilizar Bearer Token en OAuth 2.0. Anteriormente, para trabajar con tales sistemas de autenticación, era necesario especificar datos confidenciales en texto claro en el parámetro http.extraHeader. Además, el protocolo ha incorporado la posibilidad de guardar el estado de cada gestor de credenciales para soportar métodos de autenticación de múltiples etapas, utilizados en protocolos como NTLM y Kerberos.
- Se ha continuado el desarrollo del backend experimental «reftable» para el almacenamiento eficiente de referencias a ramas y etiquetas en el repositorio. Este backend utiliza un almacenamiento por bloques, utilizado por el proyecto JGit y optimizado para almacenar un número muy elevado de referencias (los formatos tradicionales de almacenamiento de referencias generan gastos generales significativos en repositorios con muchas referencias debido a la colocación de un gran número de archivos en un solo directorio en el caso de almacenar referencias en el directorio $GIT_DIR/refs o la necesidad de reescribir un único archivo grande en cada actualización en el caso de almacenar referencias en el archivo $GIT_DIR/packed_refs). En la nueva versión se ha añadido el comando «git refs migrate —ref-format=reftable» para migrar repositorios existentes al backend «reftable» (anteriormente, el backend solo se activaba al inicializar el repositorio).
- Se ha añadido la opción «—no-advice» al comando git, que desactiva todos los mensajes de recomendaciones y sugerencias, lo que puede ser útil para evitar la saturación del registro con información innecesaria durante la llamada automatizada a git.
- Se ha iniciado el proceso de traducción de algunas comprobaciones del conjunto de pruebas para utilizar pruebas unitarias, lo que simplificará la prueba de componentes de bajo nivel y mejorará la eficiencia del proceso de pruebas en la plataforma Windows, donde existen grandes cargas al ejecutar un gran número de procesos durante la ejecución de pruebas implementadas como scripts de shell.
- Se ha añadido la capacidad de usar la representación «#RGB» en el código para el análisis de la configuración de colores, además de «#RRGGBB».
Fuente: opennet.ru
