Saadaval on Git 2.41 allika juhtimissüsteem

Pärast kolmekuulist arendustööd on avaldatud hajutatud allika juhtimissüsteemi Git 2.41 väljalase. Git on üks populaarsemaid, usaldusväärsemaid ja suure jõudlusega versioonikontrollisüsteeme, mis pakub paindlikke mittelineaarseid arendustööriistu, mis põhinevad harude hargnemisel ja ühendamisel. Ajaloo terviklikkuse ja tagasiulatuvatele muudatustele vastupidavuse tagamiseks kasutatakse igas sissekandes kogu eelneva ajaloo kaudset räsimist, samuti on võimalik kontrollida üksikuid silte ja kohustusi arendajate digiallkirjadega.

Võrreldes eelmise väljalaskega võeti uude, 542 arendaja osalusel koostatud versiooni vastu 95 muudatust, millest 29 osales arenduses esmakordselt. Peamised uuendused:

  • Täiustatud käsitsemine kättesaamatute objektide puhul, millele hoidlas ei viidata (ei viidata harude ega siltidega). Prügikorjaja kustutab kättesaamatud objektid, kuid jäävad enne kustutamist teatud ajaks hoidlasse, et vältida võistlustingimusi. Kättesaamatute objektide esinemisperioodi jälgimiseks on vaja neile lisada sildid sarnaste objektide muutumise ajaga, mis ei võimalda neid salvestada ühte pakifaili, milles kõigil objektidel on ühine vahetusaeg. Varem oli iga kättesaamatu objekt salvestatud eraldi faili, mis tõi kaasa probleeme, kui oli palju värskeid kättesaamatuid objekte, mis ei olnud veel kustutamiskõlblikud. Uues versioonis kasutatakse kättesaamatute objektide pakkimisel vaikimisi “cruft packs” mehhanismi, mis võimaldab salvestada kõik kättesaamatud objektid ühte pakifaili ning andmed iga objekti muutmisaja kohta kajastuvad eraldi tabelis, salvestatakse failis laiendiga ".mtimes" ja lingitud laiendiga ".idx" registrifaili abil.
    Saadaval on Git 2.41 allika juhtimissüsteem
  • Pakettfailide kettal pöördindeksi säilitamine on vaikimisi lubatud. Torvaldsi/linuxi hoidlas testimisel võimaldas pöördindeksi kasutamine kiirendada ressursimahukaid "git push" toiminguid 1.49 korda ja lihtsaid toiminguid, nagu näiteks üksiku objekti suuruse arvutamine "git cat-" abil. file —batch='%(objectsize:disk)' "77 korda. Pöördindeksiga failid (.rev) salvestatakse hoidlas kataloogis „.git/objects/pack”.

    Tuletame meelde, et Git salvestab kõik andmed objektide kujul, mis asuvad eraldi failides. Hoidlaga töötamise tõhususe suurendamiseks paigutatakse objektid täiendavalt pakkfailidesse, milles teave esitatakse üksteisele järgnevate objektide voona (sarnast vormingut kasutatakse objektide edastamisel git fetch ja git push abil käsud). Iga pakifaili jaoks luuakse indeksfail (.idx), mis võimaldab objekti identifikaatori abil väga kiiresti määrata pakifailis nihke, millele antud objekt salvestatakse.

    Uues väljaandes sisalduva pöördindeksi eesmärk on optimeerida objekti identifikaatori määramise protsessi teabe põhjal, mis käsitleb objekti paigutust pakifailis. Varem tehti selline teisendamine käigu pealt pakifaili sõelumise ajal ja salvestati ainult mällu, mis ei võimaldanud sarnaseid indekseid uuesti kasutada ja sundis indeksit iga kord genereerima. Indeksi koostamise toiming taandub objekti-positsioonipaaride massiivi koostamisele ja nende sortimisele positsioonide järgi, mis võib suurte pakifailide puhul võtta kaua aega.

    Näiteks toiming objektide sisu kuvamiseks, mis kasutab otseindeksit, oli 62 korda kiirem kui objektide suuruse kuvamise toiming, mille puhul positsiooni ja objekti andmeid ei indekseeritud. Pärast pöördindeksi kasutamist hakkasid need toimingud võtma umbes sama palju aega. Pöördindeksid võimaldavad ka kiirendada objektide saatmise toiminguid toomis- ja tõukekäskude täitmisel, edastades otse kettalt valmisandmed.

    Saadaval on Git 2.41 allika juhtimissüsteem

  • Mandaadiabiprotokoll, mida kasutatakse mandaatide ülekandmiseks piiratud juurdepääsuga hoidlatele juurdepääsul, on lisanud tuge WWW-Authenticate päiste edastamiseks mandaaditöötleja ja teenuse vahel, milles autentimist teostatakse. Päise WWW-Authenticate tugi võimaldab teil edastada OAuthi ulatuse parameetreid, et eraldada üksikasjalikumalt kasutajate juurdepääs hoidlatele ja piiritleda päringute jaoks saadaolevaid ulatusi.
  • For-each-ref käsule on lisatud vormindusvalik "%(ahead-behind:"): )”, mis võimaldab teil kohe saada teavet teatud harus olevate või puuduvate commitide arvu kohta, võrreldes teise haruga (kui palju on üks haru teisest kohustuste tasemel taga või ees). Varem tuli sellise teabe saamiseks käivitada kaks erinevat käsku: "git rev-list —count main..my-feature", et saada harule unikaalseid sissekannete arv ja "git rev-list —count my-feature" ..main”, et saada puuduvate sissekannete arv. Nüüd saab sellised arvutused taandada üheks käsuks, mis lihtsustab töötlejate kirjutamist ja vähendab täitmisaega. Näiteks ühendamata harude kuvamiseks ja selle hindamiseks, kas need asuvad põhiharust taga või ees, võite kasutada üherealist: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(ahead-behind :origin/HEAD)' \refs/heads/tb/ | veerg -t tb/cruft-extra-tips 2 96 tb/for-each-ref – välistage 16 96 tb/roaring-bitmaps 47 3 varem kasutatud skripti asemel, mis töötab 17 korda aeglasemalt: $ git for-each-ref — formaat='%(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" "$ees" "$taga" tehtud | veerg -t tb/cruft-extra-tips 2 96 tb/iga-viide – välista 16 96 tb/möirgavad bitmaps 47 3
  • Käsule "git fetch" on lisatud valik "-portselan", kui see on määratud, genereeritakse väljund vormingus " ", vähem loetav, kuid skriptides sõelumiseks mugavam.
  • Lisatud säte "fetch.hideRefs", mis võimaldab kiirendada "git fetch" toiminguid, peites mõned viited kohalikus hoidlas kontrollimise etapis, et server on saatnud täiskomplekti objekte, mis säästab aega piirates kontrolli ainult serveritega, kust andmed otse hangitakse. Näiteks kui käivitate testi süsteemis, mille hoidlad sisaldavad suurt hulka jälgitavaid välislinke, vähendas kõigi linkide väljajätmine, välja arvatud need, mis on adresseeritud sihtserverile $remote, git-toomise toimingu täitmine 20 minutilt 30 sekundile. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ too $remote
  • Käsk "git fsck" annab võimaluse kontrollida juurdepääsetavuse bitikaartide ja pöördindeksite riknemist, kontrollsummade vastavust ja väärtuste õigsust.
  • Käsk "git clone --local" kuvab nüüd veateate, kui proovite kopeerida hoidlast, mis sisaldab $GIT_DIR-i sümbollinke.

Allikas: opennet.ru

Lisa kommentaar