Po třech měsících vývoje byl vydán nový release distribuovaného systému správy zdrojového kódu Git 2.36. Git je jedním z nejpopulárnějších, nejspolehlivějších a vysoce výkonných systémů pro správu verzí, který poskytuje flexibilní nástroje pro nelineární vývoj založené na větvení a slučování větví. Pro zajištění integrity historie a odolnosti vůči změnám „zpětně“ se používá implicitní hashování celé předchozí historie v každém commitu, stejně jako možnost ověřování digitálními podpisy vývojářů jednotlivých tagů a commitů.
Ve srovnání s předchozím vydáním bylo v nové verzi přijato 717 změn, na kterých se podílelo 96 vývojářů, z nichž 26 se poprvé zapojilo do vývoje. Hlavní novinky:
- Do příkazů „git log“ a „git show“ byla přidána volba „—remerge-diff“, která umožňuje zobrazit rozdíly mezi společným výsledkem sloučení a aktuálními daty uvedenými v commitu po provedení příkazu „merge“, což umožňuje jasně zhodnotit změny provedené v důsledku vyřešení konfliktů při sloučení. Běžný příkaz „git show“ odděluje různá vyřešení konfliktů odsazením, což ztěžuje pochopení změn. Například na níže uvedeném snímku obrazovky řádky „+/-“ bez odsazení ukazují na poslední vyřešení konfliktu spojeného se změnou názvu v první větvi sha1 na oid v komentáři, zatímco „+/-“ s odsazením ukazuje na počáteční vyřešení konfliktu způsobené přidáním dalšího argumentu ve funkci dwim_ref() ve druhé větvi.

Při použití volby „—remerge-diff“ nejsou rozdíly mezi vyřešeními konfliktů rozděleny pro každou rodičovskou větev, ale zobrazují se celkové rozdíly mezi souborem, který má sloučení konfliktů, a souborem, ve kterém jsou konflikty vyřešeny.

- Byla zvýšena flexibilita nastavení chování při resetování diskových cachí prostřednictvím volání funkce fsync(). Dříve dostupný parametr core.fsyncObjectFiles byl rozdělen na dvě konfigurační proměnné core.fsync a core.fsyncMethod, které poskytují možnost použít fsync nejen pro soubory s objekty (.git/objects), ale i pro další struktury Gitu, jako jsou odkazy (.git/refs), reflog a pack soubory.
Pomocí proměnné core.fsync můžete určit seznam interních struktur Git, pro které bude po operaci zápisu navíc vyvolán fsync. Proměnná core.fsyncMethod umožňuje vybrat metodu pro vyprázdnění cache, například můžete zvolit fsync pro použití shodného systémového volání nebo uvést writeout-only pro použití odloženého zápisu (pagecache writeback).
- Aby se předešlo zranitelnostem spojeným s manipulací s podkladem jinými uživateli v adresářích .git na sdílených oddílech, byla posílena kontrola vlastníka repozitáře. Provádění jakýchkoli příkazů git je nyní povoleno pouze ve vlastních adresářích „.git“. Pokud adresář s repozitářem patří jinému uživateli, bude ve výchozím nastavení vypsána chyba. Toto chování lze vypnout pomocí nastavení safe.directory.
- Do příkazu „git cat-file“, určeného pro výstup původního obsahu Git-objektů, byla přidána volba „—batch-command“, která doplňuje dříve dostupné příkazy „—batch“ a „—batch-check“ o možnost adaptivního výběru typu výstupu pomocí „contents “ pro výstup obsahu nebo „info “ pro výstup informací o objektu. Dále je podporován příkaz „flush“ pro vyprázdnění výstupního bufferu.
- Do příkazu „git ls-tree“, určeného pro sestavení seznamu obsahu stromu objektů, byla přidána volba „—oid-only“ („—object-only“), analogicky k „—name-only“, která výstupně zobrazuje pouze identifikátory objektů pro zjednodušení vyvolávání ze skriptů. Také byla implementována volba „—format“, která umožňuje určit vlastní formát výstupu kombinováním informací o režimu, typu, názvu a velikosti.
- V příkazu „git bisect run“ byla implementována definice nezřazení pro skript označením jako spustitelný soubor a v tomto případě výstup chyby s kódy 126 nebo 127 (dříve, pokud bylo skript nemožné spustit, byly všechny revize označeny jako problematické).
- Do příkazu „git fetch“ byla přidána volba „—refetch“ pro získání všech objektů bez informování druhé strany o obsahu, který již existuje v lokálním systému. Toto chování může být užitečné pro obnovení stavu po selháních, kdy není jistota ohledně integrity lokálních dat.
- Do příkazů „git update-index“, „git checkout-index“, „git read-tree“ a „git clean“ byla přidána podpora pro částečné indexy (sparse index), což zvyšuje výkon a šetří místo v repozitářích, kde se provádějí operace částečného klonování (sparse-checkout).
- Bylo změněno chování příkazu „git clone —filter=… —recurse-submodules“, který nyní vedle k částečnému klonování submodulů (dříve se filtr používal pouze na hlavní obsah, zatímco submoduly byly klonovány zcela bez ohledu na filtr).
- Do příkazu „git bundle“ byla přidána podpora pro specifikaci filtrů pro selektivní umístění obsahu obdobně jako při operacích částečného klonování.
- Do příkazu „git branch“ byla přidána možnost „—recurse-submodules“ pro rekurzivní procházení submodulů.
- V userdiff byl navržen nový zpracovatel pro jazyk Kotlin.
Zdroj: opennet.ru


