Dostupan sustav kontrole izvora Git 2.41

Nakon tri mjeseca razvoja, objavljeno je izdanje distribuiranog sustava za kontrolu izvora Git 2.41. Git je jedan od najpopularnijih, pouzdanih i visokoučinkovitih sustava za kontrolu verzija koji pruža fleksibilne nelinearne razvojne alate temeljene na grananju i spajanju grananja. Kako bi se osigurala cjelovitost povijesti i otpornost na retroaktivne promjene, koristi se implicitno hashiranje cijele prethodne povijesti u svakom predanju, također je moguće provjeriti pojedinačne oznake i predaje digitalnim potpisima programera.

U odnosu na prethodno izdanje, u novoj verziji prihvaćene su 542 izmjene, u pripremi je sudjelovalo 95 programera, od kojih je njih 29 prvi put sudjelovalo u razvoju. Glavne inovacije:

  • Poboljšano rukovanje nedostupnim objektima koji nisu navedeni u repozitoriju (grane ili oznake nisu navedeni). 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 nedostupnih objekata, potrebno je za njih vezati oznake s vremenom promjene sličnih objekata, što ne dopušta njihovo pohranjivanje u jednu pack-datoteku, u kojoj svi objekti imaju zajedničko vrijeme promjene. Prethodno je svaki nedostupni objekt bio pohranjen u zasebnoj datoteci, što je dovodilo do problema ako je postojao velik broj novih nedostupnih objekata koji još nisu bili podložni brisanju. U novom izdanju, prema zadanim postavkama, mehanizam "cruft packs" koristi se za pakiranje nedostupnih objekata, što omogućuje pohranjivanje svih nedostupnih objekata u jednu datoteku pakiranja i odražavanje podataka o vremenu izmjene svakog objekta u zasebnoj tablici pohranjenoj u datoteku s ekstenzijom ".mtimes" i povezanu pomoću datoteke indeksa s ekstenzijom ".idx".
    Dostupan sustav kontrole izvora Git 2.41
  • Prema zadanim postavkama omogućeno je održavanje obrnutog indeksa (revindex) na disku za datoteke paketa. Prilikom testiranja na torvalds/linux spremištima, korištenje obrnutog indeksa omogućilo nam je da ubrzamo resursno intenzivne "git push" operacije za 1.49 puta, a jednostavne operacije, kao što je izračunavanje veličine jednog objekta pomoću "git cat- file --batch='%(objectsize:disk)' » 77 puta. Datoteke (".rev") s obrnutim indeksom bit će pohranjene unutar repozitorija u direktoriju ".git/objects/pack".

    Podsjetimo se da Git pohranjuje sve podatke u obliku objekata, koji su smješteni u zasebne datoteke. Kako bi se povećala učinkovitost rada s repozitorijem, objekti se dodatno smještaju u paketne datoteke, u kojima su informacije predstavljene u obliku toka objekata koji slijede jedan za drugim (sličan format se koristi pri prijenosu objekata s git fetch i git push naredbe). Indeksna datoteka (.idx) kreirana je za svaku datoteku pakiranja, što vam omogućuje da vrlo brzo odredite pomak u datoteci pakiranja po kojem je dani objekt pohranjen prema identifikatoru objekta.

    Obrnuti indeks uključen u novo izdanje usmjeren je na pojednostavljenje procesa određivanja ID-a objekta iz informacija o lokaciji objekta u datoteci paketa. Prethodno se takva konverzija izvodila u hodu tijekom parsiranja paketne datoteke i bila je pohranjena samo u memoriji, što nije dopuštalo ponovnu upotrebu takvih indeksa i prisiljavalo je da se indeks generira svaki put. Operacija izgradnje indeksa svedena je na izgradnju niza parova objekt-pozicija i sortiranje po položaju, što može potrajati dugo za velike datoteke paketa.

    Na primjer, operacija prikaza sadržaja objekata, koja koristi izravni indeks, bila je 62 puta brža od operacije prikaza veličine objekata, za koje podaci o odnosu položaja i objekta nisu bili indeksirani. Nakon korištenja obrnutog indeksa, te su operacije počele trajati približno isto vrijeme. Obrnuti indeksi također vam omogućuju da ubrzate operaciju slanja objekata prilikom izvršavanja naredbi za dohvaćanje i potiskivanje izravnim prijenosom gotovih podataka s diska.

    Dostupan sustav kontrole izvora Git 2.41

  • Dodana je podrška za prosljeđivanje zaglavlja WWW-Authenticate između rukovatelja vjerodajnicama i usluge provjere autentičnosti protokolu "pomoćnika vjerodajnica" koji se koristi za prosljeđivanje vjerodajnica prilikom pristupanja ograničenim spremištima. Podrška za zaglavlje WWW-Authenticate omogućuje vam prosljeđivanje OAuth parametara opsega za detaljnije odvajanje korisničkog pristupa repozitoriju i razgraničenje opsega dostupnih za zahtjeve.
  • Dodana opcija formata "%(ispred-iza: )", koji vam omogućuje da odmah dobijete informacije o broju prisutnih ili odsutnih urezivanja u određenoj grani, u odnosu na drugu granu (koliko jedna grana zaostaje ili je ispred druge na razini urezivanja). Prethodno su za dobivanje ovih informacija bile potrebne dvije odvojene naredbe: "git rev-list --count main..my-feature" za dobivanje broja obveza jedinstvenih za granu i "git rev-list --count my-feature.. main" da dobijete broj predaja koji nedostaju. Sada se takvi izračuni mogu svesti na jednu instrukciju, što pojednostavljuje rukovatelje pisanjem i smanjuje vrijeme izvršenja. Na primjer, za prikaz nespojenih grana i procjenu jesu li iza ili ispred svoje glavne grane, možete upotrijebiti jednolinijski: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(naprijed-iza :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)" back="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ispred" "$iza" gotovo | stupac -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • Dodana je opcija "--porcelain" naredbi "git fetch", koja generira izlaz u formatu " ”, manje čitljiv, ali prikladniji za raščlanjivanje u skriptama.
  • Dodana postavka "fetch.hideRefs" za ubrzavanje operacija "git fetch" skrivanjem dijela poveznica u lokalnom repozitoriju u fazi provjere je li poslužitelj poslao cijeli skup objekata, što štedi vrijeme ograničavanjem provjere samo na poslužitelje iz koje se podaci izravno dohvaćaju. Na primjer, prilikom testiranja na sustavu sa spremištima koja sadrže velik broj praćenih vanjskih veza, isključivanje svih veza osim onih upućenih $remote ciljnom poslužitelju smanjilo je operaciju "git fetch" s 20 minuta na 30 sekundi. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ dohvaćanje $remote
  • Naredba "git fsck" implementira mogućnost provjere oštećenja, podudaranja kontrolnog zbroja i ispravnosti vrijednosti u bitmapama pristupačnosti i obrnutim indeksima.
  • Naredba "git clone --local" sada prikazuje pogrešku pri pokušaju kopiranja iz repozitorija koji sadrži simboličke veze unutar $GIT_DIR.

Izvor: opennet.ru

Dodajte komentar