Երկու ամիս զարգացման ընթացքում ներկայացվեց Git 2.51-ի բաժանված համակարգերի հսկողության թողարկումը՝ աղբյուրային տեքստերի համար: Git-ն առանձնանում է բարձր կատարողականությամբ և տրամադրում է ոչ գծային զարգացման միջոցներ, որոնք հիմնված են ճյուղավորման և ճյուղերի միավորման վրա: Պատմության ամբողջականությունը և հետադարձ փոփոխություններին դիմադրելը ապահովելու համար կիրառվում է նախկին ամբողջ պատմության ոչ արտահայտիչ հեշացումը յուրաքանչյուր կոմիտում, ինչպես նաև մշակողների թվային ստորագրություններով հաստատում հատուկ պիտակների և կոմիտների: Git-ի կոդը տարածվում է GPLv2+ լիցենզիայով։
Նախորդ թողարկման համեմատ, նոր տարբերակում ընդունվել է 506 փոփոխություն, որը պատրաստվել է 91 ծրագրավորողի մասնակցությամբ (21-ը առաջին անգամ մասնակցեց Git-ի զարգացմանը): Հիմնական նորույթները (1, 2, 3):
- Բարձրացվել է «git push» և «git fetch» հրամանների կատարողականությունը այն ռեպոզիտորիաներում, որտեղ շատ հղումներ են: Ցուցաբերված արագացումը ապահովվել է հղումների խմբային թարմացումներով, որոնց ընթացքում մեկ գործառնությունում միանգամից մի քանի հղում է աշխատվում, փոխարենը՝ յուրաքանչյուր հղումը թարմացնելու համար առանձին գործառնություն ստեղծելու։ Օպտիմացումը զգալիորեն բարձրացրեց «reftable» բեքենդի աշխատանքը, որը այժմ գերազանցում է «files» բեքենդի կատարողականությունը: Օրինակ, 10,000 հղումներով փորձնական ռեպոզիտորիայում «git fetch»-ի կատարողականությունը «reftable» բեքենդի օգտագործմամբ բարձրացավ 22 անգամ, իսկ «files» բեքենդի դեպքում՝ 1.25 անգամ: «git push»-ի դեպքում աճը կազմեց համապատասխանաբար 18 և 1.21 անգամ։
- Ներկայացվել է նոր մեթոդ, որն ապահովում է pack-ֆայլերում սումով բաժինների խմբագրման համար, որոնք չեն կապված հասանելի_objects_ հետևող օբյեկտների հետ, որոնք ռեպոզիտորիայում չունեն հղումներ (չեն վերաբերում ճյուղեր կամ պիտակներ): Հասանելի_objects_-ի մասին տեղեկությունները պահվում են առանձին pack-ֆայլերում («cruft packs»), ինչը պահանջում էր դրանց արտացոլումը բազմակի पैքեթի ցուցակներում (MIDX) այս օբյեկտները ընդգրկելու համար, որոնք սկզբից հասանելի չեն եղել և պահվել են միայն cruft-պաքում, բայց ապա հասանելի են դարձել նրանց վերաբերող կոմիտից հետո։
Նոր տարբերակում pack-ֆայլերի վերաթռոնը ապահովում է հասանելի_objects_-ի լրացուցիչ պատճենների պահպանումը, որոնք պահվում են միայն cruft-ֆայլերում։ Ամանորում նման փոփոխությունն ապահովում է, որ pack-ֆայլերի հավաքածուն, որոնք օգտագործվում են հասանելի_objects_-ների պահման համար, չի վերապահում օբյեկտներ, որոնք վերաբերում են այլ օբյեկտների, որոնք պահվում են այդ հավաքածուի বাইরে։ MIDX-ից cruft-ֆայլերի հասանելի_objects_-ները բացառելու համար առաջարկվում է «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
