Byla představena verze distribuovaného systému správy verzí Git 2.38. Git je jedním z nejpopulárnějších, nejspolehlivějších a vysoce výkonných systémů řízení verzí, který nabízí flexibilní nástroje pro nelineární vývoj založený na větvení a slučování. Pro zajištění integrity historie a odolnosti proti "zpětným" změnám se používá implicitní hashing celé předchozí historie v každém commitu, rovněž je možné ověřit digitálními podpisy vývojářů jednotlivé tagy a commity.
Ve srovnání s předchozí verzí byla do nové verze přijata 699 změn, připravených za účasti 92 vývojářů, z nichž 24 se podílelo na vývoji poprvé. Hlavní novinky:
- Do hlavního souboru byla zahrnuta utilita „scalar“, vyvinutá společností Microsoft pro správu velkých repozitářů. Utilita byla původně napsána v jazyce C#, ale do gitu byl zahrnut upravený variant v jazyce C. Nová utilita se od příkazu git liší tím, že standardně zahrnuje další funkce a nastavení, které ovlivňují výkon při práci s opravdu velkými repozitáři. Například při použití scalar se aplikuje:
- Částečné klonování pro práci s neúplnou kopií repozitáře.
- Vestavěný mechanismus sledování změn v souborovém systému (FSMonitor), který umožňuje obejít se bez prohledávání celého pracovní adresáře.
- Indexy pokrývající objekty v různých balíčkových souborech (multi-pack).
- Soubory commit-graph s indexem grafu commitů, které se aplikují na optimalizaci přístupu k informacím o commitech.
- Pozadí periodické práce pro udržení optimální struktury repozitáře na pozadí, aniž by blokovalo interaktivní relaci (jednou za hodinu se provádí údržba předběžného načítání nových objektů z vzdáleného repozitáře a aktualizace souboru s grafem commitů, a každou noc se spouští proces balení repozitáře).
- Režim „sparseCheckoutCone“, omezující povolené šablony při částečném klonování.
- Do příkazu „git rebase“ byla přidána volba „—update-refs“ pro aktualizaci závislých větví, vzájemně se překrývajících s přesouvanými větvemi, aby nebylo nutné ručně provádět operace checkout k každé závislé větvi pro přepnutí na požadovaný commit.
- Byla zajištěna kompatibilita příkazu „git rm“ s částečnými indexy.
- Bylo zlepšeno chování příkazu „git mv A B“ při přesouvání souboru z pracovního prostoru s částečnými indexy do režimu „cone“ ve vnějším prostoru, kde se tento režim neuplatňuje.
- Byla optimalizována forma bitmapových souborů pro práci s velkými repozitáři – byla přidána volitelná indexová tabulka se seznamem vybraných commitů a jejich posunů.
- V příkazu „git merge-tree“ byl zaveden nový režim, ve kterém se na základě dvou uvedených commitů vypočítá strom s výsledkem sloučení, jako by byly historie těchto commitů sloučeny.
- Bylo přidáno nastavení „safe.barerepository“ pro řízení možnosti umístění bare-repozitářů (repozitáře, které neobsahují pracovní stromy) uvnitř jiných git-repozitářů. Při nastavení na hodnotu „explicit“ bude povolena práce s bare-repozitáři umístěnými pouze v horním adresáři. Pro možnost umístění bare-repozitářů v podadresářích je třeba použít hodnotu „all“.
- Do příkazu „git grep“ byla přidána volba „-m“ („—max-count“), analogická příslušné volbě v GNU grep, která umožňuje omezit počet vypisovaných shod.
- V příkazu „ls-files“ byla implementována volba „—format“ pro nastavení vypisovaných polí (například je možné zahrnout výpis názvu objektu, režimů atd.).
- V „git cat-file“ při zobrazení obsahu objektů byla realizována možnost zohlednění vazeb autorů k emailům, uvedeným v souboru mailmap.
Zdroj: opennet.ru
