Dostupna je nova verzija sustava za upravljanje verzijama Git 2.41

Nakon tri mjeseca razvoja objavljena je verzija distribuiranog sustava za upravljanje verzijama Git 2.41. Git je jedan od najpopularnijih, pouzdanih i visokoučinkovitih sustava za upravljanje verzijama koji pruža fleksibilne alate za nelinearni razvoj temeljen na grananju i spajanju grana. Kako bi se osigurala cjelovitost povijesti i otpornost na promjene 'unazad', koristi se implicitno hashiranje cijele prethodne povijesti u svakom commit-u, a također je moguće ovjeriti digitalnim potpisima razvojnih programera za određene oznake i commit-e.

U usporedbi s prošlom verzijom, nova verzija uključuje 542 promjene koje su pripremili 95 razvojnih programera, od kojih se 29 prvi put pridružilo razvoju. Glavne novine su:

  • Poboljšano je upravljanje nevidljivim objektima (unreachable), na koje u repozitoriju nema referenci (nema poveznica od grana ili oznaka). Nevidljivi objekti se uklanjaju sakupljačem smeća, ali određeno vrijeme ostaju u repozitoriju kako bi se spriječila stanja utrke. Za praćenje razdoblja zadržavanja nevidljivih objekata potrebna je povezanost s oznakama koje imaju vremenske oznake o promjenama sličnih objekata, što onemogućava pohranu u istom pack-datoteci, u kojoj svi objekti imaju zajedničko vrijeme promjene. Ranije je svaki nevidljivi objekt bio pohranjen u zasebnoj datoteci, što je dovodilo do problema kada je postojalo mnogo novih nevidljivih objekata koji još nisu ispod razine za uklanjanje. U novom izdanju za pakiranje nevidljivih objekata po defaultu se koristi mehanizam 'cruft packs', koji omogućava pohranu svih nevidljivih objekata u jednoj pack-datoteci, dok se podaci o vremenu modificiranja svakog objekta odražavaju u posebnoj tablici, koja se pohranjuje u datoteci s ekstenzijom '.mtimes' i povezuje pomoću indeksne datoteke s ekstenzijom '.idx'.
    Dostupna je nova verzija sustava za upravljanje verzijama Git 2.41
  • Zadano je prema zadanim postavkama vođenje obrnutog indeksa (revindex) za pack datoteke. Tijekom testiranja na repozitoriju torvalds/linux, primjena obrnutog indeksa omogućila je ubrzanje resursno intenzivnih operacija „git push” za 1,49 puta, dok su jednostavne operacije, poput izračunavanja veličine jednog objekta pomoću „git cat-file —batch=’%(objectsize:disk)'”, postale brže 77 puta. Datoteke („.rev”) s obrnutim indeksom bit će pohranjene unutar repozitorija u direktoriju „.git/objects/pack”.

    Podsjećamo da Git pohranjuje sve podatke u obliku objekata koji se nalaze u zasebnim datotekama. Radi povećanja učinkovitosti rada s repozitorijem, objekti se dodatno smještaju u pack datoteke, u kojima je informacija predstavljena u obliku toka objekata koji se slijede jedan za drugim (sličan format koristi se prilikom prijenosa objekata s naredbama git fetch i git push). Za svaku pack datoteku stvara se indeksna datoteka (.idx) koja omogućava vrlo brzo određivanje pomaka u pack datoteci prema identifikatoru objekta.

    Obrnut indeks uključen u novo izdanje usmjeren je na optimizaciju procesa određivanja identifikatora objekta prema informacijama o smještaju objekta u pack datoteci. Ranije se takva transformacija provodila u letu tijekom analize pack datoteke i pohranjivala samo u memoriji, što nije omogućavalo ponovno korištenje sličnih indeksa i bilo je potrebno generirati indeks svaki put. Operacija izgradnje indeksa svodi se na izgradnju niza parova „objekt-položaj” i njegovo sortiranje prema položaju, što može potrajati dugo za velike pack datoteke.

    Na primjer, operacija ispisivanja sadržaja objekata, u kojoj se koristi izravni indeks, izvršila se 62 puta brže od operacije prikaza veličine objekata, za koju podaci o vezi položaja s objektom nisu indeksirani. Nakon korištenja obrnutog indeksa, navedene operacije postale su vremenski približno jednake. Obrnuti indeksi također omogućavaju ubrzanje operacija slanja objekata prilikom izvođenja naredbi fetch i push zahvaljujući izravnoj predaji već gotovih podataka s diska.

    Dostupna je nova verzija sustava za upravljanje verzijama Git 2.41
  • U protokolu „credential helper“, koji se koristi za prijenos podataka prilikom pristupa repozitorijima s ograničenim pristupom, dodana je podrška za prijenos zaglova WWW-Authenticate između obrađivača podataka i servisa u kojem se provodi autentifikacija. Podrška za zaglavlje WWW-Authenticate omogućuje prijenos scope-parametara OAuth za detaljnije razdvajanje pristupa korisnika repozitorijima i razdvajanje područja dostupnih za zahtjeve.
  • U naredbu for-each-ref dodana je opcijaformatiranja „%(ahead-behind:)“, koja omogućuje da se odjednom dobiju informacije o broju komiteta koji su prisutni ili nedostaju u određenoj grani u odnosu na drugu granu (koliko jedna grana zaostaje ili užurbava prema drugoj na razini komiteta). Ranije je za dobivanje sličnih informacija bilo potrebno izvršiti dvije odvojene naredbe: „git rev-list —count main..my-feature“ za dobivanje broja komiteta jedinstvenih za granu i „git rev-list —count my-feature..main“ za dobivanje broja nedostajućih komiteta. Sada se takva izračunavanja mogu svesti na jednu naredbu, što pojednostavljuje pisanje obrađivača i smanjuje vrijeme izvršenja. Na primjer, za prikaz grana koje nisu prošle spajanje i procjenu zaostajanja ili užurbavanja prema njihovoj osnovnoj grani može se koristiti jednostavna naredba: $ 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 umjesto ranije korištenog skripta koji se izvršava 17 puta sporije: $ 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
  • U naredbu „git fetch“ dodana je opcija „—porcelain“, pri čemu se pri njezinom navođenju generira ispis u formatu „ “, manje pregledan, ali pogodniji za analizu u skriptama.
  • Dodana je postavka „fetch.hideRefs“, koja omogućuje ubrzanje operacija „git fetch“ skrivanjem dijela referenci u lokalnom repozitoriju tijekom provjere slanja serveru cijelog skupa objekata, što omogućuje uštedu vremena ograničavajući provjeru samo na... poslužitelja, s kojih se podaci izravno izvode. Na primjer, prilikom testiranja na sustavu s repozitorijima koji sadrže veliki broj praćenih vanjskih linkova, izuzeće svih linkova osim onih usmjerenih na ciljeve poslužitelju $remote omogućilo je smanjenje trajanja operacije „git fetch” s 20 minuta na 30 sekundi. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • U timu „git fsck” implementirana je mogućnost provjere oštećenja, usklađenosti kontrolnih zbrojeva i ispravnosti vrijednosti u bitnim kartama dostupnosti i obrnuti indeksi.
  • U timu „git clone —local” implementirano je prikazivanje pogreške prilikom pokušaja kopiranja iz repozitorija koji sadrži simboličke veze unutar $GIT_DIR.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster