Написать пост

Вышла Git 2.33 с новыми технологиями переупаковки и слияния

Аватар Андрей Борисов

Вышла новая версия распределённой системы управления версиями Git 2.33. Предыдущая версия Git 2.31 появилась в марте 2021 года.

Вышла новая версия распределённой системы управления версиями Git 2.33. Предыдущая версия Git 2.31 появилась в марте 2021 года. 

Геометрическая переупаковка

Git разработал новую технологию переупаковки — «геометрическую».

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

Если самый маленький пакет содержит N объектов, то следующий по величине пакет будет содержать не менее 2N объектов, и так далее.

Зачем нужно? Исторически сложилось так, что загруженные репозитории требуют, чтобы всё их содержимое было упаковано в один огромный пакет. Это связано с тем, что битовые карты, которые очень важны для оптимизации производительности Git, могут описывать объекты только в одном пакете. Геометрическая упаковка устраняет это ограничение. 

Сравните размер пакетов до и после геометрической переупаковки с помощью этого скрипта:

			$ packsizes() {
    find .git/objects/pack -type f -name '*.pack' |
    while read pack; do
      printf "%7d %s\n" \
        "$(git show-index < ${pack%.pack}.idx | wc -l)" "$pack"
    done | sort -rn
  }
$ packsizes # before
$ git repack --geometric=2 -d
$ packsizes # after
		

merge-out

В Git также появилась новая технология слияния — merge-out. 

Она работает по тому же принципу, что и merge-recursive, но устраняет несколько давних проблем, связанных с производительностью.

Теперь большое слияние происходит быстрее в 500 раз. А серия таких слияний — в 9000 раз, поскольку merge-out умеет хранить в кэше и повторно использовать вычисления, необходимые для слияния. 

Как попробовать

Установить Git 2.33 можно через список рассылки ядра

Подробнее про другие мелкие изменения можно почитать там же или в блоге GitHub.

Источник: Блог GitHub

Следите за новыми постами
Следите за новыми постами по любимым темам
1К открытий1К показов