Byl vydán nový verze distribuovaného systému správy zdrojového kódu Git 2.48. Git se vyznačuje vysokým výkonem a poskytuje prostředky pro nelineární vývoj, založené na větvení a slučování. Pro zajištění integrity historie a odolnosti vůči zpětným změnám se používá implicitní hashování celé předchozí historie v každém commitu, jakož i digitální podpisy vývojářů pro jednotlivé tagy a commity. Kód Git je distribuován pod licencí GPLv2+.
Ve srovnání s minulou verzí byla do nové verze přijata 605 změn, které připravilo 93 vývojářů, z nichž 35 se podílí na vývoji poprvé. Hlavní novinky:
- Byla zavedena možnost sestavování pomocí systému sestavování Meson, kromě GNU Make a CMake. Pro sestavení Git lze nyní použít příkaz „meson setup build && ninja -C build“. Je pozoruhodné, že Makefile používaný při použití GNU Make se rozrostl na 3887 řádků a není tak jednoduchý, jak by si přálo. Nástroje Meson usnadňují práci se systémem sestavování, jsou vhodné pro multiplatformní sestavování a činí sestavování přístupnější pro nováčky nebo vývojáře bez zkušeností s nástrojem Make. Podpora Make a CMake se v dohledné době neplánuje ukončit.
- Byly přidány možnosti sestavení, které umožňují použít alternativní implementace hashovací funkce SHA-1 při výpočtu kontrolních součtů používaných k ověření integrity datových bloků v pack souborech. Výkon výpočtu kontrolních součtů je zvláště důležitý, například při klonování repozitáře s jádrem Linuxu se na jejich výpočet spotřebuje přibližně 78 % procesorového času. Používaná výchozí implementace zahrnuje další kontroly kolizí a ochranu proti útokům na SHA-1, jako jsou SHAttered a Shambles. Podobná ochrana, která spotřebovává další zdroje, má smysl pouze při použití SHA-1 pro kryptografické účely a je zbytečná při ověřování integrity indexových dat.
Pro sestavení Git s rychlejší implementací SHA-1, která není vhodná pro kryptosystémy, byla navržena řada možností *_UNSAFE, například „OPENSSL_SHA1_UNSAFE“. Na GitHubu sestavení se zjednodušeným SHA-1 umožnilo zvýšit výkon operací načítání a klonování dat o 10-13 %.
- Byla přidána možnost použití v příkazu „range-diff“ volby „—remerge-diff“, která umožňuje zobrazit rozdíly mezi celkovým výsledkem sloučení a skutečnými daty uvedenými v commitu po zpracování příkazu „merge“. Při použití volby „—remerge-diff“ se rozdíly mezi vyřešením konfliktů nesdílí pro každou rodičovskou větev, ale zobrazují se celkové rozdíly mezi souborem, který má konflikty sloučení, a souborem, ve kterém byly konflikty vyřešeny. V kontextu příkazu „range-diff“ může být nová volba užitečná pro porovnání sad commitů po přesunu sekvence commitů příkazem „rebase“ s volbou „—rebase-merges“.
- Byla přidána možnost spuštění testovací sady Git se zapnutým režimem zjišťování úniků paměti. Vzhledem k tomu, že git poskytuje utility, které končí po provedení vyvolané funkce, úniky paměti nebyly dříve považovány za velký problém. Potřeba úplného odstranění úniků paměti se stala aktuální po zahájení práce na přesunutí vnitřní funkčnosti do samostatné knihovny, kterou lze používat v dlouhodobě běžících procesech.
- Bylo zahájeno sestavování seznamu zastaralých režimů a funkcí, jejichž podporu se plánuje ukončit v budoucnu. Předpokládá se, že odstranění zastaralé funkčnosti proběhne v vydání Git 3.0, které zahrne změny, narušující zpětnou kompatibilitu.
- Pokračuje optimalizace práce příkazu „git for-each-ref“, který vypisuje seznam referencí v repozitáři. Optimalizace, která spojuje obslužné rutiny pro filtraci referencí a formátování výstupu, se nyní uplatňuje nejen pro neztříděný výstup, ale také při uvedení volby „—sort“.
- Byla vylepšena implementace backendu „reftable“ s blokovým úložištěm pro efektivní ukládání odkazu na větve a tagy v repozitářích. Reftable výrazně zrychluje vyhledávání, čtení a zápis v repozitářích s velmi velkým počtem odkazů. V nové verzi bylo zrušeno volání některých pomocných API za účelem dalšího vyloučení knihovny libgit ze seznamu závislostí pro sestavení. Byla implementována adaptivní správa chyb, které vracejí funkce pro alokaci paměti (nedostatek paměti nyní nevede k havárii). Byly zrychleny operace vytváření odkazů a snížena spotřeba paměti.
- Byly vyřešeny problémy v implementaci částečného klonování, které vedly k nekonečnému cyklu a poškození repozitáře po provedení příkazu „git gc“.
- Při provádění příkazu „git fetch “ v případě, že na místním systému chybí „refs/remotes//HEAD“ a na druhé straně existuje větev, na kterou se HEAD odkazuje, se nyní „refs/remotes//HEAD“ přesměrovává na tuto větev. Pro správu synchronizace „refs/remotes//HEAD“ s hodnotou HEAD na druhé straně spojení byla přidána konfigurace remote..followRemoteHEAD.
- Byla přidána konfigurace „remote..serverOption“, která odpovídá volbě příkazového řádku „--serverOption=“.
- Ve příkazu „git rebase --rebase-merges“ je zajištěno, že se pokud možno používají názvy větví jako štítky.
- K příkazům ‘git notes add’ a ‘git notes append’ byl přidán přepínač ‘-e’, který otevírá poznámku ve vnějším textovém editoru uvedeném prostřednictvím proměnné prostředí GIT_EDITOR.
- Byla vylepšena kompatibilita s GCC 15 a standardem C23.
- Byla ukončena podpora starších verzí libcURL a Perl.
Zdroj: opennet.ru
