Git 2.51 виходить з ключовими покращеннями продуктивності та новими функціями

git 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 у репозиторіях з великою кількістю посилань. Ключ до цього покращення полягає в пакетному оновленні, який обробляє кілька посилань за одну транзакцію, а не окремо.

Завдяки цій оптимізації, Тепер бекенд для перефразування перевершує традиційний бекенд для файлів.У тестах з репозиторіями, що містять до 10 000 посилань, продуктивність git fetch зросла в 22 рази для reftable та в 1.25 раза для файлів, тоді як git push покращилася в 18 разів та 1.21 раза відповідно.

Ще однією важливою інновацією є iВпровадження так званих cruft-пакетів, призначені для зберігання недоступних об'єктів, які не пов'язані з гілками чи тегами. Ці об'єкти, які раніше були розсіяні, тепер можна керувати в окремій упаковці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 отримує переваги від оптимізації фільтра Bloom, що пришвидшує пошук з кількома шляхами до файлів.
  • Команди 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