После двух месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.45. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям “задним числом” используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Код Git распространяется под лицензией GPLv2+.
По сравнению с прошлым выпуском в новую версию принято 540 изменений, подготовленных при участии 96 разработчиков, из которых 35 впервые приняли участие в разработке. Основные новшества:
- Добавлена предварительная поддержка бэкенда “reftable” для эффективного хранения в репозитории ссылок на ветки и теги. Новый бэкенд использует блочное хранилище, применяемое проектом JGit и оптимизированное для хранения очень большого числа ссылок (традиционные форматы хранения ссылок приводят в репозиториях с большим числом ссылок к ощутимым накладным расходам из-за размещения очень большого числа файлов в одном каталоге в случае хранения ссылок в каталоге $GIT_DIR/refs или необходимости перезаписи одного большого файла при каждом обновлении в случае хранения ссылок в файле $GIT_DIR/packed_refs). Новый бэкенд включается через указание опции “–ref-format=reftable” при инициализации репозитория (“git init –ref-format=reftable /path/to/repo”) и позволяет ускорить поиск, чтение и запись в репозиториях с большим числом ссылок.
- Предоставлены средства для обеспечения переносимости между идентификаторами объектов на базе хэшей SHA-1 и SHA-256. Для обеспечения работы с хэшами SHA-1 и SHA-256 в одном репозитории в процессе постепенной миграции на хэши SHA-256 предложен новый формат объектов “compatibility”, позволяющий ссылаться на объекты не только по основному хэшу, заданному при инициализации репозитория, так и по запасному хэшу. Например, при инициализации репозитория может быть выбрать формат SHA-256, а в качестве запасного предусмотрена возможность обращения по хэшу SHA-1: git init –object-format=sha256 /path/to/repo cd /path/to/repo git config extensions.compatObjectFormat sha1
- В команду “git rev-list” добавлена возможность определения объектов, отсутствующих в локальном репозитории, даже если они недостижимы в ветке или теге, что можно использовать для диагностики повреждения репозитория: git rev-list –missing=print –all | grep ‘^?’ ?70678e7afeacdcba1242793c3d3d28916a2fd152
- Добавлена новая команда “git reflog list” для показа известных reflog-ов и соответствующих им ссылок на теги и ветки.
- Предоставлена возможность определения альтернативных префиксов для вывода “git diff”, отображаемых перед файловым путём и обозначающих состояние до и после определённой версии файла (по умолчанию используются префиксы “a/” и “b/”). Для задания собственных префиксов в конфигурацию добавлены новые параметры diff.srcPrefix и diff.dstPrefix.
- Добавлен параметр core.commentString для определения строки, определяющей разделитель, который будет использоваться вместо “#” для отделения комментариев в сообщении для коммита. Ранее доступная настройка core.commentChar адаптирована для поддержки многобайтовых символов в качестве разделителя комментария (ранее поддерживались только ASCII-символы).
- В команду “git config” добавлена опция “–comment”, позволяющая сохранять комментрии в файле .gitconfig для пояснения сути тех или иных настроек. git config –comment ‘to show the merge base’ merge.conflictStyle diff3 tail -n 2 .git/config [merge] conflictStyle = diff3 # to show the merge base
- В команду “git cherry-pick” добавлена опция “–empty” для автоматического удаления избыточных коммитов, по аналогии с опцией “–empty” в git-rebase и git-am.
- В команде “git checkout -p” разрешено использовать символ “@” в качестве синонима имени “HEAD”.