Вышел Git 2.51 с ключевыми улучшениями производительности и новыми функциями

гит 2.51

После двух месяцев интенсивной работы сообщество разработчиков Git представляет Git версии 2.51, обновление, которое Он объединяет 506 изменений, в которых участвовал 91 разработчик, из которых 21 человек внесли свой вклад впервые.

В этом выпуске представлены улучшения, направленные на повышение производительности и упрощение управления репозиторием, включая оптимизацию производительности для git-push и git-fetch, а также несколько изменений, переходящих к новой ветке 3.x.

Основные новые функции Git 2.51

Одной из самых важных особенностей Git 2.51 является Оптимизация команд git push и git fetch в репозиториях с большим количеством ссылок. Ключ к этому улучшению — пакетное обновление., который обрабатывает несколько ссылок в одной транзакции, а не по отдельности.

Благодаря этой оптимизации, Бэкэнд reftable теперь превосходит по производительности традиционный файловый бэкэнд.В тестах с репозиториями, содержащими до 10 000 ссылок, производительность git fetch увеличилась в 22 раза для reftable и в 1.25 раза для files, тогда как git push улучшилась в 18 раз и 1.21 раза соответственно.

Еще одним важным нововведением является iВведение так называемых пакетов «крафт», предназначен для хранения недоступных объектов, не привязанных к ветвям или тегам. Эти объекты, которые ранее были разбросаны, теперь можно управлять в отдельной упаковкеs, что упрощает управление и уменьшает размер многопакетных индексов (MIDX).

с Новый параметр repack.MIDXMustContainCruft позволяет Git избегать включения этих объектов в основные индексы.В тестах на GitHub эта конфигурация уменьшила размер индекса на 38%, ускорила запись на 35% и улучшила чтение на 5%.

Новый подход к упаковке объектов

El Команда git pack-objects включает опцию –path-walk, который представляет инновационный метод для реорганизации упаковочных файлов. Вместо обработки объектов на основе их хешей, Git теперь может перебирать их по пути к файлу, упаковывая те, которые находятся в одном месте. Такой подход устраняет необходимость предварительной сортировки объектов и приводит к созданию более компактных и эффективных файлов упаковки.

С этой версией тоже Стандартизирован новый формат обмена состояниями рабочего дерева и индексами, созданными с помощью Git Stash.. Теперь можно экспортировать и импортировать хранилища так же, как ветви или теги, что упрощает перемещение состояний из одной системы в другую.

Например:

git stash export --to-ref refs/stashes/mi-stash git push origin refs/stashes/mi-stash git fetch origin '+refs/stashes/*:refs/stashes/*' git stash import refs/stashes/mi-stash

Улучшения классических команд

несколько Команды Git получили соответствующие обновления:

  • git cat-file теперь сообщает об отсутствующих объектах и подмодулях, показывая идентификаторы, а не просто отмечая «отсутствующие».
  • git log использует оптимизацию фильтра Блума, ускоряя поиск по нескольким путям файлов.
  • Команды git switch и git restore, считавшиеся экспериментальными с 2019 года, наконец-то стабилизировались в качестве современных альтернатив git checkout.
  • Команда git whatchanged, эквивалентная git log –raw, устарела и будет удалена в Git 3.0.
  • git for-each-ref получает опцию --start-after, которая вместе с --count позволяет разбивать вывод на страницы.
  • git merge и git pull теперь включают опцию –compact-summary, которая обеспечивает более лаконичный формат сводки.

Поддержка C99 и новые правила вклада

Git продолжает адаптировать свой код к характеристикам стандарта C99. Хотя с 2021 года требуется совместимый компилятор, разработчики осторожно подходят к сохранению совместимости с компиляторами, которые реализуют ее лишь частично.

Кроме того, в политику взносов внесено существенное изменение: Патчи теперь можно отправлять под псевдонимом, решение, соответствующее правилам ядра Linux и призванное предоставить участникам большую гибкость.

Взгляд в сторону Git 3.0

El Команда разработчиков также обновила дорожную карту до Git 3.0., где выделяются два ключевых изменения: использование SHA-256 по умолчанию в качестве идентификатора объекта и внедрение формата reftable для хранения ссылок на ветви и теги. Эти улучшения направлены на повышение безопасности и эффективности всё более крупных и сложных репозиториев.

источник: https://lore.kernel.org