Git 2.51 пристига с ключови подобрения в производителността и нови функции

git 2.51

След два месеца интензивна работа, общността от разработчици на 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.Вече е възможно експортирането и импортирането на скрити файлове (stashes) точно както клонове или тагове, което улеснява преместването на състояния от една система в друга.

Например:

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 формат за съхраняване на препратки към клонове и етикети. Тези подобрения целят да подобрят сигурността и ефективността във все по-големи и сложни хранилища.

Fuente: https://lore.kernel.org