Vydanie systému správy zdrojového kódu Git 2.51

Po dvoch mesiacoch vývoja bol predstavený release distribuovaného systému správy zdrojových textov Git 2.51. Git sa vyznačuje vysokou výkonnosťou a poskytuje prostriedky na nelineárny vývoj, založené na odvetvení a zlúčení vetiev. Na zabezpečenie integrity histórie a odolnosti voči zmenám „naspäť“ sa používa implicitné hashovanie celej predchádzajúcej histórie v každom commite, ako aj overenie digitálnymi podpismi vývojárov jednotlivých tagov a commitov. Kód Git je distribučný pod licenciou GPLv2+.

V porovnaní s predchádzajúcim vydaním bola do novej verzie prijatá 506 zmien, na ktorých sa podieľalo 91 vývojárov (21 z nich sa zapojilo do vývoja Gitu po prvýkrát). Hlavné novinky (1, 2, 3):

  • Zvýšená výkonnosť príkazov „git push“ a „git fetch“ v repozitároch s veľkým počtom odkazov. Urýchlenie zabezpečilo aktualizovanie odkazov v hromadnom režime, v ktorom sa v jednej transakcii spracúva viacero odkazov namiesto vytvárania samostatnej transakcie na aktualizáciu každého odkazu. Optimalizácia zásadne zvýšila rýchlosť backendu „reftable“, ktorý teraz predbieha výkonnosť backendu „files“. Napríklad v testovacom repozitári s 10 000 odkazmi sa výkonnosť „git fetch“ pri použití backendu „reftable“ zvýšila 22-krát, zatiaľ čo pri použití backendu „files“ len 1,25-krát. Pre „git push“ bol nárast 18-krát a 1,21-krát, respektíve.
  • Bol navrhnutý nový spôsob balenia v pack-súboroch častí repozitára, ktoré nie sú spojené s monitorovaním nedosiahnuteľných objektov, na ktoré v repozitári chýbajú odkazy (nespojujú sa s vetvami alebo tagmi). Informácie o nedosiahnuteľných objektoch sa uchovávajú v samostatných pack-súboroch („cruft packs“), čo viedlo k potrebe ich zohľadnenia v viacbalíkových indexoch MIDX (multi-pack index) na pokrytie objektov, ktoré pôvodne boli nedosiahnuteľné a boli uložené len v cruft-packu, ale neskôr sa stali dosiahnuteľnými po odkazujúcom commite.

    V novej verzii pri prebalení pack-súborov bolo zabezpečené uchovanie dodatočných kópií prístupných objektov, ktoré sú uložené iba v cruft-súboroch. Takáto zmena zaručuje, že v súbore pack, ktorý sa používa na uchovávanie prístupných objektov, sa nenachádzajú objekty, ktoré odkazujú na iné objekty uložené mimo tohto súboru. Na vylúčenie nedostupného obsahu cruft-súborov z viackomponentných indexov (MIDX) je navrhnutá nastavenie „repack.MIDXMustContainCruft“, ktoré umožňuje výrazne znížiť veľkosť takýchto indexov. Aktivácia nastavenia v repozitári GitHub viedla k zníženiu veľkosti MIDX-indexov o 38%, zrýchleniu zápisu do MIDX-indexov o 35% a zvýšeniu výkonu čítania o 5%.

  • Do príkazu „git pack-objects“ bola pridaná možnosť „—path-walk“, ktorá zahrňuje nový spôsob zbierania informácií o objektoch pri prebalení pack-súborov. Namiesto prechádzania objektov v poradí revízií predmetný spôsob „—path-walk“ umožňuje prejsť objekty prostredníctvom prechodu súborových ciest, čím je možné naraz zabaliť všetky objekty s rovnakou súborovou cestou. Tento prístup umožňuje vylúčiť heuristiku používajúcu hashovanie na určenie väzby objektu na jeho súborovú cestu, ako aj zbaviť sa triedenia objektov pred balením. Pri použití režimu „—path-walk“ je veľkosť generovaných pack-súborov značne menšia než pri zoskupovaní objektov pomocou hashov.
  • Bol určený formát na výmenu uložených stavov pracovného stromu a indexov v repozitári, ktoré sa vytvárajú pomocou príkazu „git stash“. Nový formát umožňuje kódovať uložené zmeny (stash-záznamy) ako sekvenciu commitov. Pre import a export sú navrhnuté podpríkazy „git stash import“ a „git stash export“, ktoré je možné použiť na prenos uložených stavov z jedného systému na druhý a na vykonávanie operácií push alebo pull s týmito stavmi ako s bežnými vetvami alebo tagmi. 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
  • V príkaze „git cat-file“, ktorý zobrazuje obsah zadaných objektov, bola implementovaná možnosť zobrazenia informácií o chýbajúcich objektoch (napríklad kvôli poškodeniu repozitára) a submoduloch pri používaní možností „—batch“ a „—batch-check“. Predtým príkaz „git cat-file —batch-check“ pri uvedení cesty k submodulu zobrazil „missing“, teraz však ukáže identifikátor objektu.
  • V príkaze „git log“ sa využívajú optimalizácie založené na filtroch Bloom na urýchlenie vyhľadávania v histórii zmien pri zadaní filtrov s viacerými cestami k súborom, napríklad „git log — path/to/a path/to/b“.
  • Príkazy „git switch“ a „git restore“ boli stabilizované, pričom od roku 2019 boli považované za experimentálne. Príkazy sú prezentované ako moderné ekvivalenty „git checkout“, pričom rozdeľujú také málo prepojené funkcie tohto príkazu, ako manipuláciu s vetvami (prepínanie a vytváranie) a obnovovanie súborov v pracovnom adresári.
  • Príkaz „git whatchanged“, ekvivalentný príkazu „git log —raw“, bol vyhlásený za zastaraný a plánuje sa jeho odstránenie vo vetve Git 3.0.
  • Do príkazu „git for-each-ref“ bola pridaná možnosť „—start-after“, ktorá môže byť použitá spolu s možnosťou „—count“ na usporiadanie stránkového výstupu.
  • Do príkazov „git merge“ a „git pull“ bola pridaná možnosť „—compact-summary“ na použitie kompaktnej formy súhrnnej informácie o zmenách namiesto formátu diffstat.
  • V kóde Git bolo povolené používanie kľúčového slova „bool“, ktoré sa objavilo v štandarde C99. Taktiež boli dokumentované niektoré funkcie C99, experimentálne používané v Git (napríklad v polovici roku 2026 plánujú povoliť použitie konštrukcií „(struct foo){ .member = value };“). Kompilátor podporujúci C99 je pre Git povinný od roku 2021, avšak možnosti špecifikácie C99 sa zavádzajú veľmi opatrne, aby zostala zachovaná kompatibilita s kompilátormi, ktoré podporujú tento štandard len čiastočne.
  • Do pravidiel prijímania patchov boli zmeny, ktoré umožňujú odosielať patchy pod pseudonymom, a nie iba pod skutočným menom vývojára. Zmena zodpovedá pravidlám prijímania patchov do jadra Linux.
  • Aktualizovaný zoznam nekompatibilných zmien, ktoré budú uplatnené v branchi Git 3.0. Medzi významné zmeny v očakávanom vydaní Git 3.0 patrí predvolený prechod na identifikátory objektov založené na algoritme hashovania SHA-256 pri inicializácii nových repozitárov a implementácia formátu „reftable“ na uloženie odkazov na vetvy a značky v repozitári (použitý blokový ukladací systém z projektu JGit, optimalizovaný na ukladanie veľmi veľkého počtu odkazov).

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster