Vydání systému pro správu verzí Git 2.51

Po dvou měsících vývoje byl uveden na trh nový release distribuovaného systému správy zdrojového kódu Git 2.51. Git se vyznačuje vysokou výkonností a poskytuje prostředky pro nelineární vývoj, založené na větvení a slévání větví. 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, stejně jako ověřování digitálními podpisy jednotlivých tagů a commitů. Kód Git je šířen pod licencí GPLv2+.

Ve srovnání s předchozím vydáním bylo do nové verze přijato 506 změn, které byly připraveny za účasti 91 vývojáře (21 z nich se podílelo na vývoji Gitu poprvé). Hlavní novinky (1, 2, 3):

  • Byla zvýšena výkonnost příkazů „git push“ a „git fetch“ v repozitářích s velkým počtem referencí. Zrychlení bylo dosaženo díky aktualizaci referencí v dávkovém režimu, kdy je v jedné transakci zpracováno více referencí, místo vytváření samostatné transakce pro aktualizaci každé reference. Optimalizace významně zvýšila výkon backendu „reftable“, který nyní předčí backend „files“. Například v testovacím repozitáři s 10 tisíci referencemi vzrostla výkonnost „git fetch“ při použití backendu „reftable“ 22krát, zatímco při použití backendu „files“ vzrostla pouze 1,25krát. Pro „git push“ byl nárůst 18 a 1,21krát, respektive.
  • Byla navržena nová metoda balení v pack-souborech částí repozitáře, které nejsou spojeny s sledováním nedosažitelných objektů, na které v repozitáři neexistují žádné reference (žádné větve nebo tagy na ně neodkazují). Informace o nedosažitelných objektech jsou uchovávány v samostatných pack-souborech („cruft packs“), což vedlo k nutnosti jejich odrazu v mnohopackových indexech MIDX (multi-pack index), aby bylo pokryto objekty, které byly zpočátku nedosažitelné a uchovány pouze v cruft-packu, ale poté se staly dosažitelnými po referenčním commitu.

    V nové verzi při repackování pack-souborů je zajištěno uchování dodatečných kopií dostupných objektů, které jsou uchovávány pouze v cruft-souborech. Toto změna zaručuje, že v souborovém souboru, který se používá k ukládání dostupných objektů, nejsou obsaženy objekty odkazující na jiné objekty, které jsou uchovávány mimo tento soubor. Pro vyloučení nedostupného obsahu cruft-souborů z mnohopackových indexů (MIDX) byla navržena konfigurace "repack.MIDXMustContainCruft", která výrazně zmenšuje velikost takových indexů. Aktivace této konfigurace v repozitáři GitHub vedla ke snížení velikosti MIDX-indexů o 38%, zrychlení zápisu do MIDX-indexů o 35% a zlepšení čtecí výkonnosti o 5%.

  • Do příkazu "git pack-objects" byla přidána možnost "—path-walk", která zahrnuje nový způsob sběru informací o objektech při repackování pack-souborů. Místo obcházení objektů podle revizí, při použití režimu "—path-walk" se objekty procházejí podle souborových cest, což umožňuje packovat všechny objekty se stejnou souborovou cestou najednou. Tento přístup eliminuje heuristiku, která používá hashování k určení vztahu objektu k jeho souborové cestě, a zbavuje se také třídění objektů před balením. Při použití režimu "—path-walk" je velikost generovaných pack-souborů výrazně menší než při seskupování objektů pomocí hashů.
  • Byl určen formát pro výměnu uložených stavů pracovního stromu a indexů v repozitáři vytvářených pomocí příkazu "git stash". Nový formát umožňuje kódovat uložené změny (stash-záznamy) jako sekvenci commitů. Pro import a export byly navrženy podpříkazy "git stash import" a "git stash export", které lze použít pro přenos uložených stavů z jednoho systému na druhý a provádění operací push nebo pull s těmito stavy jako s běžnými větvemi nebo tagy. 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 příkazu „git cat-file“, který zobrazuje obsah daných objektů, byla implementována možnost zobrazení informací o chybějících objektech (například v důsledku poškození repozitáře) a submodulech při použití voleb „—batch“ a „—batch-check“. Dříve při uvedení cesty k submodulu příkaz „git cat-file —batch-check“ vypsal „missing“, nyní však zobrazí identifikátor objektu.
  • V příkazu „git log“ byly nasazeny optimalizace založené na Bloomových filtrech pro urychlení vyhledávání v historii změn při použití filtrů s několika cestami k souborům, například „git log — path/to/a path/to/b“.
  • Byly stabilizovány příkazy „git switch“ a „git restore“, které byly od roku 2019 považovány za experimentální. Tyto příkazy se prezentují jako moderní ekvivalenty „git checkout“, rozdělující takové málo související možnosti tohoto příkazu, jako je manipulace s větvemi (přepínání a vytváření) a obnovení souborů v pracovním adresáři.
  • Příkaz „git whatchanged“, ekvivalentní „git log —raw“, byl označen za zastaralý a je plánováno jeho odstranění ve verzi Git 3.0.
  • Do příkazu „git for-each-ref“ byla přidána volba „—start-after“, kterou lze použít společně s volbou „—count“ pro uspořádání výstupu po stránkách.
  • Do příkazů „git merge“ a „git pull“ byla přidána volba „—compact-summary“ pro použití kompaktního formátu shrnutí změn namísto formátu diffstat.
  • V kódové základně Git bylo povoleno použití klíčového slova „bool“, které se objevilo ve standardu C99. Také byly zdokumentovány některé možnosti C99, experimentálně používané v Git (například v polovině roku 2026 se plánuje povolit použití konstrukcí „(struct foo){ .member = value };“). Kompilátor s podporou C99 je povinný pro Git od roku 2021, ale možnosti specifikace C99 jsou zaváděny velmi opatrně, aby se zachovala kompatibilita s kompilátory, které tento standard pouze částečně podporují.
  • Do pravidel pro příjem patchů byly provedeny změny, které umožňují odesílání patchů pod přezdívkou, nikoli pouze pod skutečným jménem vývojáře. Změna odpovídá pravidlům příjmu patchů do jádra Linuxu.
  • Byl aktualizován seznam porušení kompatibility změn, které budou aplikovány v rámci větve Git 3.0. Mezi významné změny v nadcházející verzi Git 3.0 patří přechod na identifikátory objektů na základě algoritmu hashování SHA-256 při inicializaci nových repozitářů a využití formátu "reftable" pro ukládání v repozitáři odkazů na větve a značky (využívá se blokové úložiště z projektu JGit, optimalizované pro uchovávání velmi velkého počtu odkazů).

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster