Dostupný systém správy zdrojových textů Git 2.41.

Po třech měsících vývoje byla vydána verze 2.41 distribuovaného systému správy zdrojového kódu Git. Git je jedním z nejpopulárnějších, nejspolehlivějších a vysoce výkonných systémů správy verzí, který poskytuje flexibilní prostředky pro nelineární vývoj, založené na větvení a slučování. 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, je také možné ověření digitálními podpisy vývojářů jednotlivých tagů a commitů.

Ve srovnání s předchozí verzí je v nové verzi přijato 542 změn, které byly připraveny za účasti 95 vývojářů, z nichž 29 se podílelo na vývoji poprvé. Hlavní novinky:

  • Byla vylepšena správa nedosažitelných objektů (unreachable), na které v repozitáři neexistují odkazy (žádné větve nebo tagy na ně neodkazují). Nedosažitelné objekty jsou odstraňovány garbage collectorem, ale před odstraněním zůstávají určitý čas v repozitáři, aby se vyloučily stavy závodu. Pro sledování doby pobytu nedosažitelných objektů je nutné je propojit s metadaty obsahujícími čas změny těchto objektů, což neumožňuje jejich uchování v jednom pack souboru, ve kterém mají všechny objekty společný čas změny. Dříve byl každý nedosažitelný objekt ukládán do samostatného souboru, což vedlo k problémům při vysokém počtu nových nedosažitelných objektů, které ještě nepodléhaly odstranění. V nové verzi se pro balení nedosažitelných objektů jako výchozí mechanismus využívá „cruft packs“, který umožňuje uchovávat všechny nedosažitelné objekty v jediném pack souboru a data o čase modifikace každého objektu uchovávat v samostatné tabulce, která je uložena v souboru s příponou „.mtimes“ a je propojena pomocí indexového souboru s příponou „.idx“.
    Dostupný systém správy zdrojových textů Git 2.41.
  • Ve výchozím nastavení je povoleno vedení na disku zpětného indexu (revindex) pro pack soubory. Při testování na repozitáři torvalds/linux umožnilo použití zpětného indexu zrychlit výpočetně náročné operace „git push“ o 1,49krát, a jednoduché operace, jako je výpočet velikosti jednoho objektu pomocí „git cat-file —batch=’%(objectsize:disk)'“, o 77krát. Soubory („.rev“) se zpětným indexem budou uloženy uvnitř repozitáře v adresáři „.git/objects/pack“.

    Připomínáme, že Git uchovává všechny údaje ve formě objektů, které jsou umístěny v samostatných souborech. Pro zvýšení efektivity práce s repozitářem jsou objekty navíc umístěny do pack souborů, v nichž jsou informace prezentovány jako proud objektů jdoucích za sebou (podobný formát se používá při přenosu objektů příkazy git fetch a git push). Pro každý pack soubor je vytvořen indexový soubor (.idx), který umožňuje velmi rychle určit offset v pack souboru podle identifikátoru objektu, kde je daný objekt uložen.

    Zahrnutý v novém vydání reverzní index je zaměřen na optimalizaci procesu určení identifikátoru objektu na základě informací o umístění objektu v pack souboru. Dříve byla tato konverze prováděna on-the-fly během analýzy pack souboru a byla uchovávána pouze v paměti, což neumožňovalo opětovné využití takových indexů a nutností generovat index pokaždé. Operace stavby indexu se snížila na vytvoření pole z párů „objekt-pozice“ a jeho třídění podle pozice, což může zabrat hodně času pro velké pack soubory.

    Například operace výpisu obsahu objektů, při níž se používá přímý index, byla provedena 62krát rychleji než operace zobrazení velikosti objektů, pro kterou data o spojení pozice s objektem nebyla indexována. Po použití reverzního indexu se uvedené operace začaly provádět s přibližně stejným časem. Reverzní indexy také umožňují urychlit operace odesílání objektů při použití příkazů fetch a push díky přímému přenosu již připravených dat z disku.

    Dostupný systém správy zdrojových textů Git 2.41.
  • Do protokolu „credential helper“, používaného pro přenos přihlašovacích údajů při přístupu k repozitářům s omezeným přístupem, byla přidána podpora přenosu hlaviček WWW-Authenticate mezi zpracovatelem přihlašovacích údajů a službou, ve které probíhá autentizace. Podpora hlavičky WWW-Authenticate umožňuje přijímat scope parametry OAuth pro podrobnější oddělení přístupu uživatele k repozitářům a omezení oblastí, které jsou dostupné pro dotazy.
  • Do příkazu for-each-ref byla přidána možnost formátování „%(ahead-behind:)“, která umožňuje najednou získat informace o počtu commitů, které se nacházejí nebo chybí v určité větvi, ve vztahu k jiné větvi (kolik jedna větev zaostává nebo předbíhá druhou na úrovni commitů). Dříve bylo pro získání těchto informací nutné provést dva samostatné příkazy: „git rev-list —count main..my-feature“ pro získání počtu unikátních commitů pro větev a „git rev-list —count my-feature..main“ pro získání počtu chybějících commitů. Nyní lze takové výpočty zjednodušit na jeden příkaz, což usnadňuje psaní zpracovatelů a zkracuje dobu provádění. Například pro zobrazení nesloučených větví a hodnocení jejich zaostávání nebo předbíhání vůči hlavní větvi lze použít jednorázový příkaz: $ git for-each-ref —no-merged=origin/HEAD \ —format='%(refname:short) %(ahead-behind:origin/HEAD)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3 namísto dříve používaného skriptu, který se provádí 17krát pomaleji: $ git for-each-ref —format='%(refname:short)' —no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead='$(git rev-list —count origin/HEAD..$ref)' behind='$(git rev-list —count $ref..origin/HEAD)' printf '%s %d %d\n' '$ref' '$ahead' '$behind' done | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • Do příkazu „git fetch“ byla přidána možnost „—porcelain“, při jejímž zadání se vytváří výstup ve formátu „ “, který je méně čitelný, ale vhodnější pro analýzu ve skriptech.
  • Byla přidána nastavení „fetch.hideRefs“, která umožňuje zrychlit operace „git fetch“ tím, že skryje část odkazů v lokálním repozitáři ve fázi kontroly, serverem odeslaného plného souboru objektů, což šetří čas tím, že omezuje kontrolu pouze servery, ze kterých jsou přímo vybírána data. Například při testování na systému s repozitáři obsahujícími velký počet sledovaných externích odkazů, vyloučení všech odkazů, kromě těch, které směřují na cílové serveru $remote, umožnilo zkrátit dobu provádění operace „git fetch“ z 20 minut na 30 sekund. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • V příkazu „git fsck“ byla implementována možnost kontroly poškození, shody kontrolních součtů a správnosti hodnot v bitových mapách dostupnosti a v opačných indexech.
  • V týmu „git clone —local“ byla implementována výstupní chyba při pokusu o kopírování z repozitáře, který obsahuje symbolické odkazy uvnitř $GIT_DIR.

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