lanzamiento del sistema distribuido de control de versiones . 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 toda la historia anterior en cada commit, y también es posible certificar digitalmente firmas de desarrolladores para etiquetas y commits individuales.
En comparación con la versión anterior, se han incorporado 544 cambios en la nueva versión, realizados por 78 desarrolladores, de los cuales 21 participaron en el desarrollo por primera vez. :
- Se ha añadido soporte para macros de configuración, a través de las cuales se puede cambiar rápidamente entre diferentes conjuntos de configuraciones sin necesidad de entrar en los detalles de las opciones específicas relacionadas. Con las macros, no es necesario recordar qué configuraciones deben modificarse para activar una funcionalidad determinada. Por ejemplo, si se experimenta una disminución en el rendimiento al trabajar con un repositorio grande, puede ser necesario cambiar a un nuevo mecanismo de indexación, habilitar la compresión de prefijos de rutas y activar la caché de archivos no rastreados estableciendo el parámetro index.version en 4 y activando core.untrackedCache. Las macros permiten ahorrar tiempo en la búsqueda de la solución adecuada en la documentación y activar de inmediato las configuraciones con optimizaciones para repositorios con un gran número de archivos.
git config feature.manyFiles true
- Por defecto, se ha habilitado el almacenamiento de objetos en forma de grafo de commits (commit-graph), donde la indexación utiliza una estructura de grafo en lugar de una lista lineal de hashes de objetos con referencias a otros objetos. Anteriormente, para determinar las versiones que contenían una corrección específica, era necesario cargar cada objeto desde el disco para buscar referencias. Sin embargo, al almacenar en forma de grafo, es posible identificar de inmediato todas las relaciones necesarias. La transición al almacenamiento en forma de grafo de commits en los repositorios del núcleo de Linux y Git ha permitido casi duplicar el rendimiento de las operaciones con ramas. Para activar el nuevo método de almacenamiento después de actualizar a Git 2.24, se debe ejecutar el comando 'git gc'.
Entre los cambios relacionados con commit-graph, también se destaca la unificación del indicador de progreso en las operaciones relacionadas con commit-graph en otras órdenes («git commit-graph write», «git commit-graph verify», etc.). El indicador de progreso ahora se muestra por defecto solo para la terminal (para cambiar este comportamiento, se debe usar la opción «-[no-]progress»). Además, se ha añadido un nuevo parámetro de configuración fetch.writeCommitGraph, que habilita la actualización automática del archivo de grafos de commits durante las operaciones «git fetch» (todos los commits extraídos de repositorios externos se agregarán inmediatamente al commit-graph sin necesidad de ejecutar auto-gc por separado);
- Se ha añadido un comando para reescribir el historial de cambios — ««, que es una alternativa más sencilla al comando «» para realizar operaciones sobre el historial de cambios en un repositorio (por ejemplo, eliminar un archivo del repositorio o extraer el historial de cambios de un directorio específico). Para mejorar la eficiencia, en lugar de un procesamiento ordenado por commit en «git filter-repo», las operaciones se realizan sobre la vista de historial en forma de flujo continuo.
La filtración del historial se realiza mediante la opción «-path-{glob,regex}», que permite utilizar tanto máscaras simples como expresiones regulares. También hay opciones para realizar operaciones de «búsqueda y reemplazo» o limpiar objetos binarios que superen un tamaño dado. Cada commit reescrito recibe un nuevo identificador hash SHA-1 y todas las referencias al commit reemplazado se actualizan de acuerdo con el nuevo identificador.
Para mostrar un resumen con estadísticas sobre el repositorio (número de objetos por tipos, los archivos y directorios más grandes, qué extensiones ocupan más espacio en disco, etc.) está disponible la opción «-analyze». Para ampliar la funcionalidad, existe la posibilidad de conectar controladores de callback arbitrarios en Python, a través de los cuales se pueden crear nuevos subcomandos y manejar diversos eventos (por ejemplo, nuevos tipos de archivos);
- Se ha añadido la opción «—end-of-options», que permite separar las opciones de los nombres de las referencias, que pueden comenzar con el símbolo «-» y ser interpretadas como opciones («git log —end-of-options —super-dangerous-option»). Si en la práctica se pueden escapar estos nombres como «git log ‘refs/heads/—super-dangerous-option'», en los scripts podrían surgir problemas con la determinación del espacio de nombres. El delimitador común «—» no es aplicable en este caso, ya que ya se utiliza para separar los nombres de las referencias de los archivos (por ejemplo, «git log —end-of-options —super-dangerous-option ^master — path/to/file»);
- Se han añadido las opciones «—strategy» y «—strategy-option» a «git rebase —rebase-merges» para seleccionar ;
- Se ha añadido un nuevo controlador «.git/hooks/pre-merge-commit», que se llama después de realizar la fusión, pero antes de grabar el commit resultante;
- El motor de autocompletado de comandos ha añadido soporte para la adición de variables de configuración vinculadas a las configuraciones de comandos específicos.
Por ejemplo, al necesitar escribir «git -c core.autocrlf=false add path/to/my/file», pero no recordar el nombre exacto de la variable «core.autocrlf», se puede presionar Tab y recibir una sugerencia.
Además, los desarrolladores de Git un código de conducta para los participantes del proyecto, que define los principios básicos para resolver situaciones conflictivas. El documento se basa en las recomendaciones de «», aplicadas en muchos proyectos de código abierto, incluyendo el núcleo de Linux, Eclipse, Freedesktop, GitLab, Ruby y Kubernetes. El documento define igualdad de oportunidades para todos los participantes, independientemente de su ideología, edad, género, preferencias religiosas, nivel educativo, estatus social y nacionalidad. Se fomenta una forma de comunicación amigable en la comunidad, la comprensión, la empatía hacia los problemas de otros participantes, la aceptación de críticas constructivas y la adopción de decisiones que sean las mejores para toda la comunidad. Se prohíbe el trolling, el comportamiento ofensivo, los intentos de humillación, el acoso, la violación de la privacidad, la divulgación de información personal, así como otras acciones que puedan considerarse inapropiadas en la comunicación profesional.
Fuente: opennet.ru
