По сравнению с прошлым выпуском в новую версию принято 621 изменение, подготовленное при участии 98 разработчиков, из которых 35 впервые участвуют в разработке. Основные новшества:
- Расширена возможность разделения на несколько pack-файлов базы недостижимых объектов ("cruft packs"), на которые в репозитории отсутствуют ссылки (не ссылаются ветки или теги). Использование нескольких мелких pack-файлов вместо одного крупного позволяет значительно сократить операции ввода/вывода при переупаковке репозиториев с большим числом недостижимых объектов, так как для каждой операции переупаковки не нужно перезаписывать все данные.
В новой версии предложена опция "--combine-cruft-below-size", при помощи которой можно организовать объединение существующих pack-файлов, размер которых не превышает заданное значение. В отличие от ранее доступной опции "--max-cruft-size" новая опция "--combine-cruft-below-size" не ограничивает максимальный размер результирующего pack-файла, что позволяет более эффективно объединять pack-файлы в репозиториях с большим числом недостижимых объектов, разнесённых по нескольким pack-файлам. - Добавлена экспериментальная поддержка инкрементального обновления многопакетных индексов MIDX (multi-pack index), при котором каждый слой MIDX-индекса c информацией о доступности объектов размещается в отдельном bitmap-файле. В очень крупных репозиториях реализованный вид индексов даёт возможность по мере поступления коммитов быстро и эффективно добавлять новые битовые карты доступности объектов.
- Из кодовой базы удалён старый движок выполнения операций слияния "recursive", на смену которому пришёл полностью переработанный движок "ORT" (Ostensibly Recursive’s Twin), более производительный, функциональный и удобный для сопровождения. ORT позволяет определить возможность объединения двух объектов, не создавая новых объектов в репозитории (при старом движке требовалось выполнение команды "git merge-tree --write-tree", записывающей новые объекты в репозиторий).
В Git 2.50 в команде merge-tree реализована опция "--quiet", при которой возможность объединения можно проверить на основе кода возврата без записи данных в репозиторий. - В "git cat-file --batch" и подобные команды добавлена опция "--filter", позволяющая пропустить некоторые объекты при выполнении операции.
Код:
git cat-file --batch-check='%(objectname)' --filter='object:type=tree' - В команде "git maintenance" реализованы три новых действия: worktree-prune, rerere-gc и reflog-expire. Действие worktree-prune предназначено для удаления устаревших или повреждённых рабочих деревьев (worktrees) в репозитории. Действие rerere-gc удаляет старых записи, оставшиеся после устранения конфликтов слияния. Действие reflog-expire удаляет устаревшие недоступные объекты из reflog.
- Добавлена команда "git reflog drop", удаляющая все данные reflog для указанной ветки.
- Проведена оптимизация обработки и использования ссылок, например, реализовано кэширование префиксов ссылок, убраны лишние проверки при выполнении команды "git update-ref", повышена эффективность поиска существующих итераторов ссылок.
- Для библиотеки cURL добавлены настройки KeepAlive: http.keepAliveIdle, http.keepAliveInterval и http.keepAliveCount.
- В команде "git rev-list" реализована возможность вывода в формате, удобном для машинного разбора, при котором каждое поле разделено символом NUL.
- Язык Perl исключён из зависимостей, необходимых для утилит работы с документацией и выполнения тестового набора ("make test"). Многие Perl-однострочники в тестах заменены на функции shell или переписаны на языке Си.
- Добавлен userdiff-обработчик для формата файлов конфигурации ".ini".
- В команде send-email улучшена поддержка SMTP-сервера Outlook.
Источник: https://www.opennet.ru/opennews/art.shtml?num=63413
(opennet.ru, основная лента)