Git 2.52 значительно ускоряет отслеживание изменений в масштабах каталога

Спустя три месяца после выхода предыдущей версии 2.51 Git, распределённая система контроля версий и основа разработки программного обеспечения, помогающая разработчикам эффективно управлять изменениями в коде в рамках проектов, выпустила новую версию 2.52.
Одним из наиболее заметных дополнений является новый высокопроизводительный метод анализа причинно-следственных связей на уровне дерева. Вместо того чтобы многократно просматривать одни и те же коммиты для каждого файла в каталоге, новый подход позволяет вычислять информацию о последнем изменении для целых деревьев за долю времени. Это значительно ускоряет запросы к истории всего каталога, особенно в больших репозиториях.
Выпуск также расширяет возможности Git по обслуживанию. Новая задача по геометрическому обслуживанию представляет собой нечто среднее между медленной переупаковкой «всё в одном» и стратегиями инкрементальной переупаковки, которые никогда не удаляют недостижимые объекты. Она проверяет файлы упаковки, определяет, возможна ли геометрическая переупаковка, и при необходимости возвращается к традиционной git gc переупаковке.
Кроме того, в Git 2.52 улучшена функция самоанализа репозитория с помощью экспериментальной команды git repo — нового инструмента, предназначенного для объединения функций, которые ранее были разбросаны по rev-parse. Он может сообщить, является ли репозиторий пустым или поверхностным, перечислить форматы, используемые для объектов и ссылок, а также сгенерировать структурные сводки, такие как количество объектов и статистика ссылок.
Изменения коснулись и работы со ссылками. Команда git refs получила две подкоманды — list и exists, которые объединяют распространённые операции со ссылками, ранее выполнявшиеся с помощью нескольких команд. Хотя они не добавляют новых возможностей, они упрощают рабочие процессы для инструментов и скриптов, которым требуется согласованный низкоуровневый доступ к ссылкам на репозитории.
Следует также отметить, что Git 2.52 готовит проект к крупным обновлениям, запланированным для Git 3.0. Ветвь по умолчанию для новых репозиториев будет переименована с master на main. Это изменение уже доступно для тестирования с помощью флага сборки WITH_BREAKING_CHANGES.
Интеграция с Rust впервые появилась в качестве дополнительной функции во время сборки. Если включен флаг WITH_RUST, Git может использовать реализацию на Rust для кодирования и декодирования целых чисел переменной длины. Несмотря на ограниченную область применения, это закладывает основу для перехода дополнительных компонентов на Rust в будущих выпусках. Поддержка Rust будет оставаться дополнительной функцией до выхода Git 3.0, когда она станет обязательной.
Дополнительные улучшения включают расширенную поддержку фильтра Блума для большего количества шаблонов pathspec, что позволяет быстрее выполнять обход в области пути в случаях, когда используются как подстановочные, так и обычные компоненты. Также были внесены некоторые улучшения в работу ключевых команд.
Скорость работы git describe увеличивается на 30 % за счёт использования приоритетной очереди. git remote rename более эффективно обрабатывает обновления ссылок. git log -L позволяет избежать ненужных сравнений на уровне дерева при слиянии коммитов. А xdiff, механизм сравнения и слияния в Git, получил множество оптимизаций, и их планируется ещё больше.
Наконец, у пользователей sparse-checkout появился новый инструмент для восстановления. Подкоманда git sparse-checkout clean решает проблемы, связанные с тем, что после изменения определений файлы остаются за пределами разреженного набора. Такие сценарии было сложно исправить в предыдущих версиях. Новая команда устраняет несоответствия и обеспечивает соответствие рабочих деревьев активной разреженной спецификации.
Как всегда, это обновление включает в себя множество исправлений ошибок, обновлённую документацию и небольшие улучшения для повышения удобства использования. Более подробную информацию обо всех изменениях в Git 2.52 можно найти в официальном объявлении: https://github.blog/open-source/git/highlights-from-git-2-52/.
Редактор: AndreyEx
Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.