Выпуск системы управления исходными текстами Git 2.50

Опубликован выпуск распределенной системы управления исходными текстами Git 2.50. Git отличается высокой производительностью и предоставляет средства нелинейной разработки, базирующиеся на ответвлении и слиянии веток. Для обеспечения целостности истории и устойчивости к изменениям “задним числом” используются неявное хеширование всей предыдущей истории в каждом коммите, а также удостоверение цифровыми подписями разработчиков отдельных тегов и коммитов. Код Git распространяется под лицензией GPLv2+.

По сравнению с прошлым выпуском в новую версию принято 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.
Release. Ссылка here.