После трёх месяцев разработки опубликован выпуск распределенной системы управления исходными текстами Git 2.46. Git является одной из самых популярных, надёжных и высокопроизводительных систем управления версиями, предоставляющей гибкие средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям “задним числом” используются неявное хеширование всей предыдущей истории в каждом коммите, также возможно удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Код Git распространяется под лицензией GPLv2+.
По сравнению с прошлым выпуском в новую версию принято 746 изменений, подготовленных при участии 96 разработчиков, из которых 31 впервые участвуют в разработке. Основные новшества:
- Добавлена экспериментальная поддержка нового вида битовых карт –
“pseudo-merge reachability bitmap”, в которых в отличие от структуры “reachability bitmap” данные о наборах объектов, имеющих отношение к коммитам, хранятся не в привязке к каждому отдельному коммиту, а в привязке сразу к нескольким коммитам. Подобная организация позволяет использовать одну битовую карту при определении объектов для коммитов в разных ветках, что в больших репозиториях даёт возможность обойтись без создания большого числа отдельных битовых карт и заметно ускорить обход объектов для определения того, какие объекты необходимо отправить клиенту при выполнении таких операций, как “git fetch”, “git rev-list” и “git clone”. Для включения нового вида битовых карт и определения логики их выбора и использования в больших репозиториях предложена серия настроек “bitmapPseudoMerge”: git config bitmapPseudoMerge.all.pattern ‘refs/(heads|tags)/’ git config bitmapPseudoMerge.all.threshold now git config bitmapPseudoMerge.all.stableThreshold never git repack -adb - Предложен новый интерфейс командной строки для команды “git config”, в котором вместо разрозненных опций для просмотра, переименования и удаления настроек и секций, таких как “–get”, “–get-all”, “–unset” и “–remove-section”, предложен набор субкоманд. Например, для вывода все настроек для репозитория теперь можно использовать команду “git config list”, а для просмотра содержимого определённого параметра – команду “git config get “. Для дополнительной фильтрации результатов при помощи опции “–regexp” можно задать фильтр на основе регулярного выражения.
- В протокол “credential helper“, применяемый для передачи учётных данных при обращения к репозиторям c ограниченным доступом, добавлена поддержка новых полей “authtype” и “credential”, позволяющих создавать обработчики для систем HTTP-аутентификации, не ограничивающихся проверкой логина и пароля, например, при применении Bearer Token в OAuth 2.0. До этого для работы с подобными системами аутентификации приходилось указывать конфиденциальные данные в открытом виде в параметре http.extraHeader. Кроме того, в протокол добавлена возможность сохранения состояния каждого обработчика учётных данных для поддержки многоэтапных методов аутентификации, используемых в таких протоколах, как NTLM и Kerberos.
- Продолжено развитие экспериментального бэкенда “reftable” для эффективного хранения в репозитории ссылок на ветки и теги. Данный бэкенд использует блочное хранилище, применяемое проектом JGit и оптимизированное для хранения очень большого числа ссылок (традиционные форматы хранения ссылок приводят в репозиториях с большим числом ссылок к ощутимым накладным расходам из-за размещения очень большого числа файлов в одном каталоге в случае хранения ссылок в каталоге $GIT_DIR/refs или необходимости перезаписи одного большого файла при каждом обновлении в случае хранения ссылок в файле $GIT_DIR/packed_refs). В новой версии добавлена команда “git refs migrate –ref-format=reftable” для перевода существующих репозиториев на бэкенд “reftable” (ранее бэкенд включался только при инициализации репозитория).
- В команду git добавлена опция “–no-advice”, отключающая все сообщения с рекомендациями и подсказками, что может оказаться полезным для предотвращения забивания лога лишней информацией при автоматизированном вызове git.
- Начался процесс перевода некоторых проверок из тестового набора на использование unit-тестов, что упростит тестирование низкоуровневых компонентов и повысит эффективность процесса тестирования на платформе Windows, на которой возникают большие накладные расходы при запуске большого числа процессов во время выполнения тестов на shell.
- В код для разбора настроек цветов добавлена возможность использования представления “#RGB” в дополнение к “#RRGGBB”.