Издание на системата за управление на изходния код Git 2.51

След като повторно разработените функционалности в продължение на два месеца, е представен релиз на разпределената система за управление на изходния код Git 2.51. Git се отличава с висока производителност и предоставя инструменти за нелинеарно разработване, базирани на клонове и сливане на клонове. За осигуряване на целостта на историята и устойчивостта към промените "задълбочено" се използва неявно хеширане на цялата предишна история за всеки комит, както и удостоверяване с цифрови подписи на разработчиците на отделни тагове и комити. Кодът на Git се разпространява под лиценз GPLv2+.

В сравнение с предишния релиз, в новата версия са приети 506 промени, приготвени с участието на 91 разработчик (21 от които участват за първи път в разработката на Git). Основните нововъведения (1, 2, 3):

  • Повишена е производителността на командите „git push“ и „git fetch“ в репозитории с голям брой референции. Ускорението е постигнато благодарение на обновлението на референциите в пакетен режим, при който в една транзакция се обработват няколко референции, вместо да се създава отделна транзакция за обновление на всяка референция. Оптимизацията значително увеличи скоростта на работа на бекенда „reftable“, който сега надминава по производителност бекенда „files“. Например, в тестово репозитория с 10 хиляди референции производителността на „git fetch“ при използване на бекенда „reftable“ е увеличена 22 пъти, а при използване на бекенда „files“ – 1.25 пъти. За „git push“ увеличението е 18 и 1.21 пъти, съответно.
  • Предложен е нов метод за пакетиране в pack-файлове на части от репозитория, които не са свързани с проследяване на недостъпни обекти, на които в репозитория липсват референции (не с което и да е клон или таг). Информацията за недостъпните обекти се съхранява в отделни pack-файлове („cruft packs“), което води до необходимостта от отразяването им в много-пакетни индекси MIDX (multi-pack index) за обхващане на обекти, които в началото са били недостъпни и се съхраняваха само в cruft-пакета, но след това станаха достъпни след комит, който се слага за референция.

    В новата версия при повторно опаковане на pack файловете е осигурено запазването на допълнителни копия на достъпните обекти, съхранявани само в cruft файлове. Тази промяна гарантира, че в набора от pack файлове, използвани за съхранение на достъпните обекти, не съдържат обекти, които се позовават на други обекти, съхранявани извън този набор. За изключване на недостъпното съдържание от многопакетните индекси (MIDX) в cruft файловете е предложена настройка „repack.MIDXMustContainCruft“, която позволява значително намаляване на размера на подобни индекси. Активирането на настройката в репозитория GitHub е позволило да се намали размерът на MIDX индексите с 38%, да се ускори записът в MIDX индексите с 35% и да се повиши производителността на четене с 5%.

  • В командата „git pack-objects“ е добавена опция „—path-walk“, която включва нов метод за събиране на информация за обектите при повторно опаковане на pack файловете. Вместо обхождане на обектите по ред на ревизиите, при използване на режима „—path-walk“, обектите се обработват чрез обхождане на файловите пътища, което позволява едновременно да се опаковат всички обекти с един и същ файлов път. Такъв подход дава възможност да се изключи евристиката, използваща хеширане за определяне на свързаността на обекта с неговия файлов път, както и да се премахне сортирането на обектите преди опаковането. При използване на режима „—path-walk“ размерът на генерираните pack файлове е значително по-малък, отколкото при групиране на обектите чрез хешове.
  • Определен е формат за обмен на запазените състояния на работното дърво и индексите в репозитория, създадени с помощта на командата „git stash“. Новият формат позволява кодиране на запазените промени (stash записи) под формата на последователност от комити. За импортиране и експортиране са предложени подкоманди „git stash import“ и „git stash export“, които могат да се използват за прехвърляне на запазените състояния от една система на друга и извършване на операции push или pull с тези състояния както с обикновени клонове или тагове. 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
  • В екипировката на „git cat-file“, която извежда съдържанието на зададени обекти, при използване на опции „—batch“ и „—batch-check“ е реализирана възможността да се показва информация за липсващи обекти (например, поради повреда на хранилището) и субмодули. Преди, когато се посочваше път към субмодул, командата „git cat-file —batch-check“ извеждаше „missing“, а сега ще покаже идентификатора на обекта.
  • В командата „git log“ са внедрени оптимизации на базата на филтри на Блум за ускоряване на търсенето в историята на измененията при задаване на филтри с няколко пътя на файлове, например, „git log — path/to/a path/to/b“.
  • Командите „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“ за използване на компактен формат на обобщение на промените вместо формата diffstat.
  • В кодовата база на Git е разрешено използването на ключовата дума „bool“, която се появи в стандарта C99. Освен това са документирани някои възможности от C99, експериментално използвани в Git (например, планира се от 2026 година да бъде разрешено използването на конструкции „(struct foo){ .member = value };“). Компилатор с поддръжка на C99 е задължителен за Git от 2021 година, но възможностите на спецификацията C99 се внедряват много внимателно, за да се запази съвместимостта с компилаторите, които само частично поддържат този стандарт.
  • В правилата за приемане на патчи са направени промени, разрешаващи изпращането на патчи под псевдоним, а не само под истинското име на разработчика. Промените съответстват на правилата за приемане на патчи в ядрото на Linux.
  • Актуализиран е списъкът на несъвместимите промени, които ще бъдат приложени в клон Git 3.0. Сред значимите промени в предстоящия релиз на Git 3.0 се отбелязва, че по подразбиране ще се премине към идентификатори на обекти, базирани на алгоритъра за хеширане SHA-256 при инициализация на нови репозитории, както и активирането на формата «reftable» за съхранение на линкове към клонове и тагове в репозитория (включва се блочно хранилище от проекта JGit, оптимизирано за съхранение на много голям брой линкове).

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster