K dispozici je systém řízení zdroje Git 2.41

Po třech měsících vývoje byla zveřejněna verze distribuovaného systému pro řízení zdrojů Git 2.41. Git je jedním z nejpopulárnějších, spolehlivých a vysoce výkonných systémů pro správu verzí, který poskytuje flexibilní nelineární vývojové nástroje založené na větvení a slučování větví. Pro zajištění integrity historie a odolnosti vůči retroaktivním změnám se používá implicitní hashování celé předchozí historie v každém commitu, je také možné ověřit jednotlivé tagy a commity pomocí digitálních podpisů od vývojářů.

Do nové verze, připravované za účasti 542 vývojářů, bylo oproti předchozímu vydání přijato 95 změn, z nichž 29 se podílelo na vývoji poprvé. Hlavní inovace:

  • Vylepšené zacházení s nedostupnými objekty, které nejsou odkazovány v úložišti (nejsou odkazovány větve nebo značky). Nedosažitelné objekty jsou odstraněny sběračem odpadků, ale před odstraněním zůstávají po určitou dobu v úložišti, aby se zabránilo závodům. Pro sledování periody nedosažitelných objektů je nutné na ně navázat štítky s časem změny podobných objektů, což neumožňuje jejich uložení do jednoho pack-souboru, ve kterém mají všechny objekty společný čas změny. Dříve byl každý nedostupný objekt uložen v samostatném souboru, což vedlo k problémům, pokud existovalo velké množství čerstvých nedosažitelných objektů, které ještě nebyly předmětem smazání. V novém vydání se standardně k zabalení nedostupných objektů používá mechanismus „cruft packs“, který umožňuje uložit všechny nedosažitelné objekty do jednoho souboru balíčku a odrážet data o čase modifikace každého objektu v samostatné tabulce uložené v soubor s příponou „.mtimes“ a propojený pomocí indexového souboru s příponou „.idx“.
    K dispozici je systém řízení zdroje Git 2.41
  • Ve výchozím nastavení je povoleno udržování zpětného indexu (revindex) na disku pro soubory pack. Při testování na repozitářích torvalds/linux nám použití reverzního indexu umožnilo zrychlit operace „git push“ náročné na zdroje 1.49krát a jednoduché operace, jako je výpočet velikosti jednoho objektu pomocí „git cat- soubor --batch='%(velikost objektu:disk)' » 77krát. Soubory (.rev) s reverzním indexem budou uloženy v úložišti v adresáři „.git/objects/pack“.

    Připomeňme, že Git ukládá všechna data 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 v pack souborech, ve kterých jsou informace prezentovány ve formě proudu objektů po sobě následujících (podobný formát se používá při přenosu objektů pomocí git fetch a git push příkazy). Pro každý pack soubor je vytvořen indexový soubor (.idx), který umožňuje velmi rychle určit offset v pack souboru, kterým je daný objekt uložen identifikátorem objektu.

    Reverzní index obsažený v nové verzi je zaměřen na zefektivnění procesu určování ID objektu z informací o umístění objektu v souboru balíčku. Dříve se taková konverze prováděla za běhu během analýzy souboru balíčku a byla uložena pouze v paměti, což neumožňovalo opětovné použití takových indexů a nutilo se index pokaždé vygenerovat. Operace vytváření indexu se redukuje na sestavení pole párů objekt-pozice a jeho řazení podle pozice, což může u velkých balíčků trvat dlouho.

    Například operace zobrazení obsahu objektů, která používá přímý index, byla 62krát rychlejší než operace zobrazení velikosti objektů, u kterých nebyla indexována data vztahu pozice k objektu. Po použití reverzního indexu začaly tyto operace trvat přibližně stejnou dobu. Reverzní indexy také umožňují urychlit operaci odesílání objektů při provádění příkazů fetch a push přímým přenosem hotových dat z disku.

    K dispozici je systém řízení zdroje Git 2.41

  • Přidána podpora pro předávání hlaviček WWW-Authenticate mezi obslužnou rutinou pověření a ověřovací službou protokolu „pomocník pověření“, který se používá k předávání pověření při přístupu k omezeným úložištím. Podpora hlavičky WWW-Authenticate umožňuje předat parametry rozsahu OAuth podrobněji oddělenému uživatelskému přístupu k úložištím a vymezit rozsahy dostupné pro požadavky.
  • Přidána možnost formátu "%(ahead-beind: )", což vám umožňuje okamžitě získat informace o počtu revizí přítomných nebo nepřítomných v určité větvi ve vztahu k jiné větvi (jak moc jedna větev zaostává za nebo před druhou na úrovni odevzdání). Dříve vyžadovalo získání těchto informací dva samostatné příkazy: "git rev-list --count main..my-feature" pro získání počtu potvrzení jedinečných pro větev a "git rev-list --count my-feature.. main" k získání počtu chybějících commitů. Nyní lze takové výpočty zredukovat na jedinou instrukci, což zjednodušuje popisovače zápisu a zkracuje dobu provádění. Chcete-li například zobrazit nesloučené větve a vyhodnotit, zda jsou za svou hlavní větví nebo před ní, můžete použít jeden řádek: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-beind :origin/HEAD)' \refs/heads/tb/ | sloupec -t tb/cruft-extra-tips 2 96 tb/for-each-ref—vyloučit 16 96 tb/roaring-bitmaps 47 3 místo dříve používaného skriptu, který je 17krát pomalejší: $ git for-each-ref - format='%(refname:short)' --no-merged=origin/HEAD \refs/heads/tb | while read ref do advance="$(git rev-list --count origin/HEAD..$ref)" behind="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$za" hotovo | sloupec -t tb/cruft-extra-tips 2 96 tb/for-each-ref—mimo 16 96 tb/roaring-bitmaps 47 3
  • Přidána možnost „--porcelain“ do příkazu „git fetch“, který generuje výstup ve formátu „ ”, méně čitelné, ale pohodlnější pro analýzu ve skriptech.
  • Přidáno nastavení „fetch.hideRefs“ pro urychlení operací „git fetch“ skrytím části odkazů v místním úložišti ve fázi kontroly, zda server odeslal celou sadu objektů, což šetří čas omezením kontroly pouze na servery ze kterého jsou data přímo načítána. Například při testování na systému s repozitáři, která obsahují velký počet sledovaných externích odkazů, zkrátilo vyloučení všech odkazů kromě těch, které jsou adresovány cílovému serveru $remote, operace „git fetch“ z 20 minut na 30 sekund. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Příkaz „git fsck“ implementuje schopnost kontrolovat poškození, shodu kontrolního součtu a správnost hodnot v bitmapách přístupnosti a reverzních indexech.
  • Příkaz "git clone --local" nyní zobrazuje chybu při pokusu o kopírování z úložiště obsahujícího symbolické odkazy uvnitř $GIT_DIR.

Zdroj: opennet.ru

Přidat komentář