Después de dos meses de desarrollo, se ha publicado la versión del sistema de control de versiones distribuido Git 2.45. Git es uno de los sistemas de control de versiones más populares, fiables y de alto rendimiento, que ofrece herramientas flexibles para el desarrollo no lineal, basadas en bifurcaciones y fusiones de ramas. Para garantizar la integridad de la historia y la resistencia a los cambios retrospectivos, se utiliza un hashing implícito de toda la historia previa en cada commit, también es posible verificar digitalmente las firmas de los desarrolladores en etiquetas y commits individuales. El código de Git se distribuye bajo la licencia GPLv2+.
Comparado con la versión anterior, en la nueva versión se han aceptado 540 cambios, realizados con la participación de 96 desarrolladores, de los cuales 35 participaron en el desarrollo por primera vez. Principales novedades:
- Se ha añadido soporte preliminar para el backend "reftable" para un almacenamiento eficiente en el repositorio de referencias a ramas y etiquetas. El nuevo backend utiliza un almacenamiento basado en bloques, implementado por el proyecto JGit y optimizado para manejar un número muy grande de referencias (los formatos tradicionales de almacenamiento de referencias pueden provocar una sobrecarga significativa en los repositorios con muchas referencias debido a la colocación de un gran número de archivos en un solo directorio en caso de almacenamiento de referencias en el directorio $GIT_DIR/refs o la necesidad de sobrescribir un gran archivo en cada actualización cuando se almacenan referencias en el archivo $GIT_DIR/packed_refs). El nuevo backend se activa mediante la opción "--ref-format=reftable" al inicializar el repositorio ("git init --ref-format=reftable /ruta/al/repositorio") y permite acelerar la búsqueda, lectura y escritura en repositorios con un gran número de referencias.
- Se han proporcionado medios para garantizar la portabilidad entre los identificadores de objetos basados en los hash SHA-1 y SHA-256. Para asegurar el trabajo con los hashes SHA-1 y SHA-256 en un mismo repositorio durante el proceso de migración gradual a los hashes SHA-256, se ha propuesto un nuevo formato de objeto ‘compatibility’, que permite referirse a los objetos no solo por el hash principal establecido al inicializar el repositorio, sino también por un hash de respaldo. Por ejemplo, al inicializar el repositorio, se puede seleccionar el formato SHA-256 y definir como respaldo el hash SHA-1: git init —object-format=sha256 /path/to/repo cd /path/to/repo git config extensions.compatObjectFormat sha1
- Se ha añadido a la orden ‘git rev-list’ la capacidad de mostrar los identificadores de objetos que no están en el repositorio local, incluso si son inalcanzables en una rama o etiqueta, lo que se puede utilizar para diagnosticar la corrupción del repositorio: git rev-list —missing=print —all | grep ‘^?’ ?70678e7afeacdcba1242793c3d3d28916a2fd152
- Se ha añadido un nuevo comando ‘git reflog list’ para mostrar los reflogs conocidos y sus correspondientes referencias a etiquetas y ramas.
- Se ha proporcionado la posibilidad de definir prefijos alternativos para la salida de ‘git diff’, que se muestran antes de la ruta del archivo y representan el estado antes y después de una versión del archivo determinada (por defecto se utilizan los prefijos ‘a/’ y ‘b/’). Se han añadido nuevos parámetros diff.srcPrefix y diff.dstPrefix a la configuración para establecer propios prefijos.
- Se ha añadido el parámetro core.commentString para definir la línea delimitadora que se usará en lugar del carácter ‘#’ para ignorar los comentarios en el mensaje de commit. La configuración anterior core.commentChar se ha adaptado para soportar caracteres multibyte como delimitador de comentarios (anteriormente solo se soportaban los caracteres ASCII).
- Se ha añadido la opción ‘—comment’ al comando ‘git config’, que permite guardar comentarios en el archivo .gitconfig para explicar la naturaleza de ciertas configuraciones. git config —comment ‘to show the merge base’ merge.conflictStyle diff3 tail -n 2 .git/config [merge] conflictStyle = diff3 # to show the merge base
- Se ha añadido una opción ‘—empty’ al comando ‘git cherry-pick’ para eliminar automáticamente los commits redundantes, de manera similar a la opción ‘—empty’ en git-rebase y git-am.
- En el comando ‘git checkout -p’ se permite usar el símbolo ‘@’ como sinónimo del nombre ‘HEAD’.
Fuente: opennet.ru
