Po dvoch mesiacoch vývoja bol vydaný nový release distribuovaného systému správy zdrojových kódov Git 2.35. Git je jedným z najpopulárnejších, najspoľahlivejších a najvýkonnejších systémov správy verzií, poskytujúcim flexibilné prostriedky pre nelineárny vývoj založené na vetvení a spájaní. Na zabezpečenie integrity histórie a odolnosti voči zmenám „retroaktívne“ sa používa implicitné hashovanie celej predchádzajúcej histórie v každom commite, pričom je možné overenie digitálnymi podpismi jednotlivých tagov a commitov.
V porovnaní s predchádzajúcim vydaním príjme nová verzia 494 zmien, ktoré pripravilo 93 vývojárov, z ktorých 35 sa zúčastnilo vývoja po prvýkrát. Hlavné novinky:
- Rozšírené možnosti používania SSH kľúčov na overenie Git objektov digitálnym podpisom. Pre rozdelenie doby platnosti viacerých kľúčov bola pridaná podpora OpenSSH direktív „valid-before“ a „valid-after“, pomocou ktorých je možné zabezpečiť správnu činnosť s podpisom po rotácii kľúča jedného z vývojárov. Predtým sa vyskytol problém s rozdelením podpisov starým a novým kľúčom — ak sa odstránil starý kľúč, nebolo možné overiť podpisy vytvorené jeho pomocou, a ak sa ponechal — ostávala možnosť vytvárania nových podpisov starým kľúčom, ktorého miesto už zaujal iný kľúč. Pomocou valid-before a valid-after je možné rozdeliť oblasť platnosti kľúčov na základe času vytvorenia podpisu.
- V nastavení merge.conflictStyle, ktoré umožňuje vybrať spôsob zobrazenia informácií o konfliktoch pri spájaní, bola pridaná podpora režimu „zdiff3“, ktorý presúva všetky typové riadky uvedené na začiatku alebo na konci konfliktu mimo oblasť konfliktu, čo umožňuje dosiahnuť kompaktnejšie zobrazenie informácií.
- Do tímu „git stash“ bola pridaná možnosť „—staged“, ktorá umožňuje skryť len zmeny pridané do indexu, napríklad v situáciách, keď je potrebné dočasne odložiť časť zložitých zmien, aby sa najprv pridalo to, čo je už hotové, a s ostatným sa popasovať neskôr. Tento režim je podobný príkazu „git commit“, ktorý zapisuje iba zmeny uložené v indexe, ale namiesto vytvorenia nového commitu sa v „git stash —staged“ výsledok ukladá do dočasnej oblasti stash. Po tom, čo budú zmeny potrebné, ich môžete obnoviť príkazom „git stash pop“.
- Do príkazu „git log“ bol pridaný nový špecifikátor formátu „—format=%(describe)“, ktorý umožňuje zlučovať výstup „git log“ s výsledkom vykonania príkazu „git describe“. Parametre pre „git describe“ sú zadané priamo v špecifikátore („—format=%(describe:match=,exclude=)“), v ktorom je tiež možné zahrnúť skrátené značky („—format=%(describe:tags=)“) a nastaviť počet hexadecimálnych znakov pre identifikáciu objektov („—format=%(describe:abbrev=)“). Napríklad, pre výstup posledných 8 commitov, ktorých značky nemajú označenie kandidáta na vydanie, a pre nastavenie 8-znakových identifikátorov môžete použiť príkaz: $ git log -8 —format='%(describe:exclude=*-rc*,abbrev=13)' v2.34.1-646-gaf4e5f569bc89 v2.34.1-644-g0330edb239c24 v2.33.1-641-g15f002812f858 v2.34.1-643-g2b95d94b056ab v2.34.1-642-gb56bd95bbc8f7 v2.34.1-203-gffb9f2980902d v2.34.1-640-gdf3c41adeb212 v2.34.1-639-g36b65715a4132
- V nastavení user.signingKey bola implementovaná podpora nových typov kľúčov, ktoré nie sú obmedzené na typ „ssh-“ a zadaní úplnej cesty k súboru s kľúčom. Alternatívne typy sú zadávané pomocou prefixu „key::“, napríklad „key::ecdsa-sha2-nistp256“ pre kľúče ECDSA.
- Výrazne sa zvýšila rýchlosť generovania zoznamu zmien v režime „—histogram“, ako aj pri použití možnosti „—color-moved-ws“, ktorá ovláda zvýrazňovanie prázdnych miest v farebnom diffe.
- V príkaze „git jump“, používanom na poskytovanie informácií Vim o presných prechodoch na požadovanú pozíciu v súbore pri riešení konfliktov zlúčenia, prezeraní rozdielov alebo vykonávaní operácie hľadania, bola poskytnutá možnosť zúžiť pokryté konflikty zlúčenia. Napríklad pre obmedzenie operácií iba na adresár „foo“ môžete zadať „git jump merge — foo“, a pre vylúčenie z spracovania adresára „Documentation“ — „git jump merge — ':^Documentation'“.
- Bola vykonaná práca na štandardizácii použitia typu „size_t“ namiesto „unsigned long“ pre hodnoty predstavujúce veľkosť objektov, čo umožnilo aplikovať filtre „clean“ a „smudge“ na súbory väčšie ako 4 GB na všetkých platformách, vrátane platforiem s modelom údajov LLP64, kde je typ „unsigned long“ obmedzený na 4 bajty.
- Do príkazu „git am“ bola pridaná možnosť „—empty=(stop|drop|keep)“, ktorá umožňuje pri spracovaní patchov z poštovej schránky vybrať správanie pre prázdne správy, ktoré neobsahujú patchy. Hodnota „stop“ ukončí celú operáciu aplikovania patchov, „drop“ preskočí prázdny patch, „keep“ vytvorí prázdny commit.
- V príkazoch „git reset“, „git diff“, „git blame“, „git fetch“, „git pull“ a „git ls-files“ bola pridaná podpora čiastočných indexov (sparse index), ktoré zvyšujú výkon a šetria miesto v repozitároch, v ktorých sa vykonávajú operácie čiastočného klonovania (sparse-checkout).
- Príkaz „git sparse-checkout init“ bol označený za zastaraný, namiesto neho by sa mal použiť „git sparse-checkout set.“
- Bola pridaná počiatočná implementácia nového backendu „reftable“ na uchovávanie odkazov, ako sú vetvy a tagy, v repozitári. Nový backend využíva blokové úložisko, ktoré je používané projektom JGit a optimalizované na uchovávanie veľmi veľkého počtu odkazov. Backend zatiaľ nie je integrovaný so systémom odkazov (refs) a nie je pripravený na praktické použitie.
- Farebná paleta príkazu „git grep“ bola prispôsobená nástroju GNU grep.
Zdroj: opennet.ru
