Пояснення Git 2.51: MIDX без криптографії, пакети Path-Walk, обмін stash та шлях до Git 3.0

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

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

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

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

Функції Git 2.51

Великі репозиторії покладаються на пакетні файли та MIDX (багатопакові індекси) для швидкого розв'язання об'єктівІсторично, недосяжні об'єкти потрапляли в «cruft packs» (пакети cruft) і мали залишатися поза MIDX. Але якщо колись недосяжний об'єкт пізніше стає досяжним і знаходиться лише в cruft pack (пакеті cruft), це може порушити припущення щодо растрових зображень і уповільнити роботу.

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

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

Якщо ваш монорепозиторій MIDX став громіздким, спробуйте перепакувати з новим налаштуванням та виміряйте покращення пошуку та обходу у ваших робочих процесах неперервної інтеграції та розробки.

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

Покращення Git 2.51

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

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

Щоб поекспериментувати з ним під час перепакування, використовуйте нову опцію для pack-objects: --path-walkДля команд, які обмежують розміри пакетів, це може одночасно зменшити обсяг передачі даних по мережі та локального сховища.

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

Переміщення запасів між машинами було незручним тому що коміти stash приховані за одним refs/stashGit 2.51 представляє варіант, який представляє кілька записів stash як послідовність комітів, пов'язаних між собою, тому вони поводяться більше як звичайний журнал.

Завдяки такому дизайну ви можете експортувати та імпортувати сховища через звичайні посилання., надсилати або отримувати їх, як гілки чи теги, та зберігати незавершену роботу в різних середовищах без спеціальних патчів чи tar-архівів.

Приклад робочого процесу для спільного використання сховища:

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

# On another machine
$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Такий підхід забезпечує організованість вашої роботи та можливість перевірки, особливо в умовах використання різних пристроїв або під час передачі незавершеного завдання товаришу по команді.

Чіткіша сантехніка та повсякденна ергономіка

cat-file стає розумнішим У пакетних режимах: при запиті про шлях до підмодуля, збірки до версії 2.51 часто повертали значення «відсутній». Git 2.51 тепер більш корисно повідомляє тип об'єкта (наприклад, «підмодуль»), що допомагає скриптам, яким потрібно розмірковувати про вміст репозиторію у великих масштабах.

Фільтри Блума зі зміненим шляхом тепер допомагають працювати з кількома специфікаціями шляхів. (наприклад, git log -- a b), розширюючи перелік випадків, коли обхід історії може впевнено пропускати коміти. Це практичне пришвидшення для поширених шаблонів перегляду та дослідження.

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

git whatchanged застарів і заплановано до видалення в Git 3.0. Якщо ви все ще покладаєтеся на нього, його можна викликати за влучно названою --i-still-use-this позначку під час міграції до git log --raw.

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

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

Якщо ви хочете переглянути попередній перегляд налаштувань за замовчуванням на завтра, ви можете будувати з WITH_BREAKING_CHANGES випробувати вхідну поведінку в контрольованих середовищах. Хостинг-провайдери та автори інструментів можуть використовувати це для виявлення крайніх випадків перед основним переходом.

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

Оновлення мови та процесу

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

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

Як спробувати основні функції сьогодні

Увімкніть стратегію MIDX без використання шкідливих матеріалів для скорочення багатопакетних індексів та пришвидшення читання:

$ git config --global repack.MIDXMustContainCruft true
$ git gc --cruft --aggressive

Перепакувати з прогулянкою стежкою щоб оцінити різницю в розмірі пакета та часі виконання:

$ git repack -ad
$ git pack-objects --path-walk --revs --stdout < .git/objects/pack/pack-list.txt > new.pack

Спільне використання сховища між машинами з новими підкомандами експорту/імпорту:

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

Все сказаноGit 2.51 — це еволюційний реліз, який виправдовує себе у щоденному використанні: швидше та ефективніше керування об'єктами; практичні покращення для скриптів та запитів до історії; чистіший робочий процес зі сховищами; та стабільний прогрес до ери Git 3.0, де SHA-256 та reftable стають нормою.

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