K dispozícii je systém riadenia zdroja Git 2.41

Po troch mesiacoch vývoja bolo zverejnené vydanie distribuovaného systému riadenia zdrojov Git 2.41. Git je jedným z najpopulárnejších, najspoľahlivejších a najvýkonnejších systémov na správu verzií, ktorý poskytuje flexibilné nelineárne vývojové nástroje založené na vetvení a zlučovaní vetiev. Na zabezpečenie integrity histórie a odolnosti voči retroaktívnym zmenám sa používa implicitné hashovanie celej predchádzajúcej histórie v každom commite, je tiež možné overiť jednotlivé tagy a commity digitálnymi podpismi od vývojárov.

Oproti predchádzajúcemu vydaniu bolo do novej verzie, pripravovanej za účasti 542 vývojárov, prijatých 95 zmien, z ktorých 29 sa podieľalo na vývoji prvýkrát. Hlavné inovácie:

  • Vylepšené zaobchádzanie s nedostupnými objektmi, na ktoré sa neodkazuje v úložisku (neodkazujú sa na ne vetvy alebo značky). Nedosiahnuteľné objekty odstráni zberač odpadu, ale pred odstránením zostanú v úložisku určitý čas, aby sa predišlo rasovým podmienkam. Pre sledovanie periódy výskytu nedosiahnuteľných objektov je potrebné k nim pripevniť štítky s časom zmeny podobných objektov, čo neumožňuje ich uloženie do jedného balíkového súboru, v ktorom majú všetky objekty spoločný čas zmeny. Predtým bol každý nedostupný objekt uložený v samostatnom súbore, čo viedlo k problémom, keď existovalo veľké množstvo nových nedostupných objektov, ktoré ešte nebolo možné odstrániť. V novom vydaní sa na balenie nedostupných objektov štandardne používa mechanizmus „cruft packs“, ktorý vám umožňuje uložiť všetky nedostupné objekty do jedného súboru balíka a údaje o čase úpravy každého objektu sa odrážajú v samostatnej tabuľke v súbore s príponou „.mtimes“ a prepojený pomocou indexového súboru s príponou „.idx“.
    K dispozícii je systém riadenia zdroja Git 2.41
  • Udržiavanie reverzného indexu na disku pre súbory balíkov je štandardne povolené. Pri testovaní na repozitári torvalds/linux umožnilo použitie reverzného indexu 1.49-krát zrýchliť operácie „git push“ náročné na zdroje a jednoduché operácie, ako je výpočet veľkosti jedného objektu pomocou „git cat- súbor —batch='%(veľkosť objektu:disk)' "77-krát. Súbory (.rev) s reverzným indexom budú uložené v úložisku v adresári „.git/objects/pack“.

    Pripomeňme, že Git ukladá všetky údaje vo forme objektov, ktoré sa nachádzajú v samostatných súboroch. Pre zvýšenie efektivity práce s repozitárom sa objekty dodatočne umiestňujú do pack súborov, v ktorých sú informácie prezentované vo forme prúdu objektov za sebou (podobný formát sa používa pri prenose objektov pomocou git fetch a git push príkazy). Pre každý pack súbor je vytvorený indexový súbor (.idx), ktorý umožňuje pomocou identifikátora objektu veľmi rýchlo určiť offset v pack súbore, na ktorom je daný objekt uložený.

    Reverzný index zahrnutý v novom vydaní je zameraný na optimalizáciu procesu určovania identifikátora objektu z informácií o umiestnení objektu v súbore balíka. Predtým sa takáto konverzia vykonávala za behu pri analýze súboru balíka a ukladala sa iba do pamäte, čo neumožňovalo opätovné použitie podobných indexov a nútilo sa index generovať zakaždým. Operácia vytvárania indexu spočíva v skonštruovaní poľa párov objekt-pozícia a jeho triedení podľa pozície, čo môže pri veľkých súboroch balíkov trvať dlho.

    Napríklad operácia na zobrazenie obsahu objektov, ktorá používa priamy index, bola 62-krát rýchlejšia ako operácia na zobrazenie veľkosti objektov, pre ktorú neboli indexované údaje o polohe k objektu. Po použití reverzného indexu začali tieto operácie trvať približne rovnaký čas. Reverzné indexy vám tiež umožňujú urýchliť operácie odosielania objektov pri vykonávaní príkazov fetch a push priamym prenosom hotových údajov z disku.

    K dispozícii je systém riadenia zdroja Git 2.41

  • Protokol „pomocník poverení“, ktorý sa používa na prenos poverení pri prístupe k úložiskám s obmedzeným prístupom, má pridanú podporu pre odovzdávanie hlavičiek WWW-Authenticate medzi obsluhou poverení a službou, v ktorej sa vykonáva overenie. Podpora hlavičky WWW-Authenticate vám umožňuje odovzdať parametre rozsahu OAuth pre podrobnejšie oddelenie používateľského prístupu k archívom a vymedzenie rozsahov dostupných pre požiadavky.
  • Do príkazu for-each-ref bola pridaná možnosť formátovania "%(ahead-behind:": )“, čo vám umožňuje okamžite získať informácie o počte potvrdení prítomných alebo neprítomných v určitej vetve vo vzťahu k inej vetve (o koľko je jedna vetva za alebo pred druhou na úrovni odovzdania). Predtým ste na získanie takýchto informácií potrebovali spustiť dva samostatné príkazy: „git rev-list —count main..my-feature“ na získanie počtu potvrdení jedinečných pre vetvu a „git rev-list —count my-feature“ ..main” na získanie počtu chýbajúcich odovzdaní. Teraz môžu byť takéto výpočty zredukované na jeden príkaz, čo zjednodušuje písanie handlerov a skracuje čas vykonania. Napríklad, ak chcete zobraziť vetvy, ktoré neboli zlúčené, a vyhodnotiť, či sú za alebo pred hlavnou vetvou, môžete použiť jednoriadkové: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(dopredu:origin/HEAD)' \refs/heads/tb/ | stĺpec -t tb/cruft-extra-tips 2 96 tb/for-each-ref—vylúčiť 16 96 tb/roaring-bitmaps 47 3 namiesto predtým používaného skriptu, ktorý beží 17-krát pomalšie: $ 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 | stĺpec -t tb/cruft-extra-tips 2 96 tb/for-each-ref—vylúčiť 16 96 tb/roaring-bitmaps 47 3
  • Do príkazu „git fetch“ bola pridaná možnosť „-porcelain“, po zadaní sa výstup vygeneruje vo formáte „ “, menej čitateľný, ale pohodlnejší na analýzu v skriptoch.
  • Pridané nastavenie „fetch.hideRefs“, ktoré vám umožňuje zrýchliť operácie „git fetch“ skrytím niektorých referencií v lokálnom úložisku vo fáze kontroly, či server odoslal celú množinu objektov, čo šetrí čas obmedzenie kontroly len na servery, z ktorých sa priamo získavajú údaje. Napríklad pri spustení testu na systéme s úložiskami obsahujúcimi veľký počet sledovaných externých odkazov, vylúčenie všetkých odkazov okrem odkazov adresovaných cieľovému serveru $remote skrátilo vykonanie operácie git fetch z 20 minút na 30 sekúnd. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Príkaz „git fsck“ poskytuje možnosť kontrolovať poškodenie, súlad kontrolného súčtu a správnosť hodnôt v bitmapách dostupnosti a reverzných indexoch.
  • Príkaz "git clone --local" teraz zobrazuje chybu pri pokuse o kopírovanie z úložiska, ktoré obsahuje symbolické odkazy v $GIT_DIR.

Zdroj: opennet.ru

Pridať komentár