Git 2.51 виходить з MIDX без cruft, пакетами path-walk, імпортом/експортом stash та основою 3.0.

Останнє оновлення: 08/21/2025
Автор: C SourceTrail
  • Нові безшовні багатопакетні індекси з repack.MIDXMustContainCruft зменшити розмір MIDX та пришвидшити читання.
  • Перепакування прогулянки шляхом (--path-walk) виробляє менші упаковки з конкурентоспроможним терміном виконання.
  • Формат обміну сховищами дозволяє експортувати/імпортувати сховища як посилання на різні машини.
  • Прогрес у напрямку Git 3.0: позначено SHA-256 та змінювані значення за замовчуванням; удосконалено інтерфейс користувача та інструменти.

Візуальне зображення випуску Git 2.51

Вийшов Git 2.51, що пропонує широкий набір покращень від понад 91 учасника (включаючи 21 новачка) та постійну роботу з модернізації інструменту без порушення усталених робочих процесів.

Цей випуск зосереджений на практичних оновленнях— від зберігання та пакування до зручності використання та безпеки — підготувавши шляхи для змін, запланованих на Git 3.0.

Індекси багатопакетних упаковок без ковбас

Git зберігає дані як об'єкти (блоби, дерева, коміти) або вільно, або всередині пакетних файлів, з індексами пакетів, що зіставляють хеші зі зміщеннями. Багатопакетні індекси (MIDX) дозволяють Git індексувати об'єкти в багатьох пакетах, перетворюючи багато пошуків в один O(log N) пошук, а також вони забезпечують растрові карти досяжності для швидкої перевірки стримування.

Зморшки були масками від тертя, де недосяжні об'єкти знаходяться поза MIDX. Якщо об'єкт, який колись був недосяжним, пізніше стає досяжним з растрового коміту, але існує лише в cruft pack, він не має бітової позиції, що блокує генерацію растрового зображення.

Git 2.51 змінює поведінку перепаковування таким чином, під час створення нових не-cruft-пакетів, він дублює об'єкти (та їхніх предків), єдина інша копія яких знаходиться в cruft-пакеті. Повторення цього гарантує, що не-cruft-набір є закритим за досяжністю, забезпечуючи послідовне покриття растровим зображенням.

Нова конфігурація спрощує це: repack.MIDXMustContainCruft використовує оновлену логіку перепакування, щоб не додавати крафт-паки до MIDX. При масовому використанні файли MIDX зменшилися приблизно на 38%, записувалися приблизно на 35% швидше, а продуктивність читання покращилася приблизно на 5%.

Менші рюкзаки з прогулянкою по стежці

У Git 2.49 запроваджено покращений хеш імені для впорядкування об'єктів під час дельта-вибору, зменшення залежності від останніх 16 символів шляху та врахування структури каталогів для розумнішого сполучення.

Git 2.51 йде далі з новим режимом колекції «path walk» для перепаковування. Замість того, щоб випускати об'єкти суворо в порядку редагування, Git групує та випускає всі об'єкти для заданого шляху разом, обходячи необхідність евристики хешу імені.

Результатом є компактніші пакетні файли з покращеними можливостями дельта-збігів між об'єктами з однаковим шляхом та таймінгами, що конкурують з класичним обходом. Ви можете спробувати це з новим --path-walk опція під час перепаковування.

Огляд можливостей Git 2.51

Формат обміну Stash

Якщо ви використовуєте git stash часто, ви знаєте, що традиційно кожен сховище моделюється як три коміти (проіндексований, неіндексований та синтетичний батьківський, що пов'язує їх разом), що зберігаються під refs/stash, що робить міграцію між машинами незручною.

Git 2.51 додає ланцюгове представлення де кожен запис stash містить додаткове походження, що посилається на попередній запис stash, формуючи лінійну історію, яку легше переміщувати та керувати.

Нові підкоманди розблоковують портативністьВи можете експортувати сховища в одне посилання та витягувати/завантажувати їх, як будь-яку гілку чи тег, а потім імпортувати на інший комп'ютер.

Приклад робочого процесу:

$ git stash export --to-ref refs/stashes/my-stash
$ git push origin refs/stashes/my-stash

$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Нотатки щодо продуктивності для великих репозиторіїв

Оновлення довідників масштабуються краще у репозиторіях з дуже великою кількістю посилань, завдяки пакетним оновленням, які зменшують транзакційні витрати. У сценаріях з приблизно 10,000 XNUMX посилань, повідомляється про значне прискорення, особливо з використанням reftable backend, для таких операцій, як fetch та push.

Інструменти та полірування UX

  • git cat-file є більш інформативним для шляхів підмодулів у --batch-check режим, що повідомляє про запис підмодуля, а не просто про «відсутність».
  • Фільтри Блума зі зміненим контуром тепер допомагають з кількома специфікаціями шляхів (наприклад, git log -- a b), розширюючи охоплення оптимізації.
  • git switch та git restore є стабільними і більше не вважаються експериментальними, що закріплює їхню роль як чіткіші альтернативи git checkout.
  • git whatchanged є застарілим і заплановано до видалення в Git 3.0; він залишається доступним після --i-still-use-this.
  • git for-each-ref додає пагінацію через --start-after, покращення списку посилань у дуже великих репозиторіях.
  • Об'єднання отримує акуратніший зміст з --compact-summary та цінності git merge та git pull.

На шляху до Git 3.0: налаштування безпеки та сховища за замовчуванням

Проєкт продовжує перехід на SHA-256Хоча нові репозиторії сьогодні за замовчуванням використовують SHA-1, більше внутрішніх компонентів та транспортів у версії 2.51 розуміють SHA-256, що спрощує експерименти та тестування сумісності.

Reftable має всі шанси стати платформою за замовчуванням Бекенд посилань у Git 3.0, що вирішує проблеми чутливості до регістру та Unicode у Windows/macOS, забезпечує атомарні транзакції посилань та використовує переваги геометричного ущільнення та стиснення префіксів.

Хочете переглянути майбутні налаштування за замовчуванням? Ви можете зібрати Git за допомогою WITH_BREAKING_CHANGES для тестування майбутньої базової лінії (наприклад, SHA-256 та змінюваних значень за замовчуванням) перед випуском версії 3.0.

Процес та стандарти розробника

Використання C99 розширюється: кодова база тепер загалом дозволяє bool ключове слово, а проект документує, які функції C99 прийняті або оцінюються, балансуючи між сучасними мовними можливостями та портативністю.

Правила внесків змінюються дозволити подання матеріалів від імені інших учасників, окрім їхнього офіційного імені, що більше відповідає підходу ядра Linux та знижує бар'єри для участі.

Git 2.51 поєднує конкретні переваги, такі як MIDX без використання криптографії, пакети Path-walk, імпорт/експорт сховищ та підвищення продуктивності великих репозиторіїв, зі стабільним прогресом у напрямку сильнішої криптографії та сучасних налаштувань сховища за замовчуванням, що забезпечується різноманітною спільнотою розробників та нових учасників.

Схожі повідомлення: