Dostupan je sistem kontrole izvora Git 2.41

Nakon tri mjeseca razvoja, objavljeno je izdanje distribuiranog sistema za kontrolu izvora Git 2.41. Git je jedan od najpopularnijih, najpouzdanijih i sistema za kontrolu verzija visokih performansi koji pruža fleksibilne nelinearne razvojne alate zasnovane na grananju i spajanju grana. Da bi se osigurao integritet istorije i otpornost na retroaktivne promene, koristi se implicitno heširanje celokupne prethodne istorije u svakom urezivanju, takođe je moguće verificirati pojedinačne oznake i urezivanja digitalnim potpisima programera.

U odnosu na prethodno izdanje, u novu verziju, pripremljenu uz učešće 542 programera, prihvaćene su 95 izmjene, od kojih je 29 prvi put učestvovalo u razvoju. Glavne inovacije:

  • Poboljšano rukovanje nedostižnim objektima koji nisu referencirani u spremištu (grane ili oznake nisu referencirane). Nedostupne objekte uklanja sakupljač smeća, ali ostaju u spremištu određeno vrijeme prije uklanjanja kako bi se izbjegli uvjeti utrke. Da bi se pratio period nedostižnih objekata, potrebno je na njih vezati etikete sa vremenom promjene sličnih objekata, što ne dozvoljava njihovo pohranjivanje u jednu pack-datoteku, u kojoj svi objekti imaju zajedničko vrijeme promjene. Ranije je svaki nedostupni objekt bio pohranjen u posebnu datoteku, što je dovodilo do problema ako je postojao veliki broj svježih nedostupnih objekata koji još nisu bili podložni brisanju. U novom izdanju, prema zadanim postavkama, mehanizam “cruft packs” se koristi za pakovanje nedostupnih objekata, što omogućava pohranjivanje svih nedostupnih objekata u jednu datoteku paketa i odražavanje podataka o vremenu modifikacije svakog objekta u zasebnoj tabeli pohranjenoj u fajl sa ekstenzijom “.mtimes” i povezan pomoću indeksne datoteke sa ekstenzijom “.idx”.
    Dostupan je sistem kontrole izvora Git 2.41
  • Podrazumevano je omogućeno održavanje obrnutog indeksa (revindex) na disku za datoteke paketa. Kada smo testirali na torvalds/linux repozitorijumima, upotreba obrnutog indeksa nam je omogućila da ubrzamo resursno intenzivne "git push" operacije za 1.49 puta i jednostavne operacije, kao što je izračunavanje veličine jednog objekta pomoću "git cat- file --batch='%(objectsize:disk)' » 77 puta. Fajlovi (".rev") sa obrnutim indeksom će biti pohranjeni unutar spremišta u direktoriju ".git/objects/pack".

    Podsjetimo da Git sve podatke pohranjuje u obliku objekata, koji su smješteni u zasebne datoteke. Da bi se povećala efikasnost rada sa spremištem, objekti se dodatno postavljaju u datoteke paketa, u kojima su informacije predstavljene u obliku niza objekata koji slijede jedan za drugim (sličan format se koristi kod prijenosa objekata pomoću git dohvati i git push komande). Za svaku datoteku paketa kreira se indeksna datoteka (.idx), koja vam omogućava da vrlo brzo odredite pomak u datoteci paketa po kojem je dati objekt pohranjen prema identifikatoru objekta.

    Obrnuti indeks uključen u novo izdanje ima za cilj pojednostavljenje procesa određivanja ID-a objekta iz informacija o lokaciji objekta u datoteci paketa. Ranije se takva konverzija obavljala u hodu tokom raščlanjivanja datoteke paketa i bila je pohranjena samo u memoriji, što nije dozvoljavalo ponovnu upotrebu takvih indeksa i prisiljavalo je da se indeks generiše svaki put. Operacija izgradnje indeksa svodi se na izgradnju niza parova objekt-pozicija i sortiranje po poziciji, što može potrajati dugo za velike datoteke paketa.

    Na primjer, operacija prikazivanja sadržaja objekata, koja koristi direktni indeks, bila je 62 puta brža od operacije prikazivanja veličine objekata, za koje podaci o odnosu pozicija-objekat nisu indeksirani. Nakon korištenja obrnutog indeksa, ove operacije su počele trajati približno isto vrijeme. Obrnuti indeksi vam također omogućavaju da ubrzate rad slanja objekata prilikom izvršavanja naredbi za preuzimanje i guranje direktnim prijenosom gotovih podataka s diska.

    Dostupan je sistem kontrole izvora Git 2.41

  • Dodata podrška za prosljeđivanje WWW-Authenticate zaglavlja između rukovatelja vjerodajnicama i servisa za provjeru autentičnosti na protokol "pomoćnika vjerodajnica" koji se koristi za prosljeđivanje vjerodajnica prilikom pristupa ograničenim spremištima. Podrška za zaglavlje WWW-Authenticate omogućava da se parametri opsega OAutha proslijede granularnije odvojenom korisničkom pristupu spremištima i razgraniče opsege koji su dostupni za zahtjeve.
  • Dodata opcija formata "%(naprijed-iza: )", što vam omogućava da odmah dobijete informaciju o broju urezivanja prisutnih ili odsutnih u određenoj grani, u odnosu na drugu granu (koliko jedna grana zaostaje ili ispred druge na nivou urezivanja). Ranije su za dobijanje ovih informacija bile potrebne dvije odvojene naredbe: "git rev-list --count main..my-feature" da bi se dobio broj urezivanja jedinstvenih za granu, i "git rev-list --count my-feature.. main" da dobijete broj urezivanja koji nedostaje. Sada se takvi proračuni mogu svesti na jednu naredbu, što pojednostavljuje pisanje rukovalaca i smanjuje vrijeme izvršenja. Na primjer, da biste prikazali nespojene grane i procijenili da li su iza ili ispred svoje glavne grane, možete koristiti jednoliner: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | stupac -t tb/cruft-extra-tips 2 96 tb/for-each-ref—isključi 16 96 tb/roaring-bitmaps 47 3 umjesto prethodno korištene skripte, koja je 17 puta sporija: $ 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)" iza="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" urađeno | stupac -t tb/cruft-extra-tips 2 96 tb/za-svakog-ref—isključuje 16 96 tb/roaring-bitmap 47 3
  • Dodata opcija "--porcelain" naredbi "git fetch", koja generiše izlaz u formatu " “, manje čitljiv, ali pogodniji za raščlanjivanje u skriptama.
  • Dodata postavka "fetch.hideRefs" za ubrzanje "git fetch" operacija skrivanjem dijela veza u lokalnom spremištu u fazi provjere da li je server poslao cijeli skup objekata, čime se štedi vrijeme ograničavanjem provjere samo na servere iz koje se podaci direktno preuzimaju. Na primjer, prilikom testiranja na sistemu sa spremištima koja sadrže veliki broj praćenih vanjskih veza, isključivanje svih veza osim onih upućenih na $remote ciljni server smanjilo je operaciju "git dohvaćanja" sa 20 minuta na 30 sekundi. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ dohvati $remote
  • Komanda "git fsck" implementira mogućnost provjere oštećenja, podudaranja kontrolne sume i ispravnosti vrijednosti u bitmapama pristupačnosti i obrnutim indeksima.
  • Komanda "git clone --local" sada prikazuje grešku pri pokušaju kopiranja iz spremišta koje sadrži simboličke veze unutar $GIT_DIR.

izvor: opennet.ru

Dodajte komentar