Na voljo je sistem za nadzor vira Git 2.41

Po treh mesecih razvoja je bil izdan porazdeljeni sistem za nadzor vira Git 2.41. Git je eden najbolj priljubljenih, zanesljivih in visoko zmogljivih sistemov za nadzor različic, ki zagotavlja prilagodljiva nelinearna razvojna orodja, ki temeljijo na razvejanju in združevanju. Za zagotovitev celovitosti zgodovine in odpornosti proti retroaktivnim spremembam se v vsaki objavi uporablja implicitno zgoščevanje celotne prejšnje zgodovine, možno je tudi certificiranje posameznih oznak in potrditev z digitalnimi podpisi razvijalcev.

V primerjavi s prejšnjo izdajo je nova različica vsebovala 542 sprememb, pripravljenih s sodelovanjem 95 razvijalcev, od tega jih je 29 pri razvoju sodelovalo prvič. Glavne novosti:

  • Izboljšano ravnanje z nedosegljivimi objekti, ki niso navedeni v repozitoriju (na katere se ne sklicujejo veje ali oznake). Nedosegljive objekte izbriše zbiralnik smeti, vendar ostanejo v skladišču določen čas, preden se izbrišejo, da se izognejo tekmovalnim pogojem. Za sledenje obdobju pojavljanja nedosegljivih objektov je potrebno nanje pripeti oznake s časom spremembe podobnih objektov, kar ne omogoča shranjevanja v eno paketno datoteko, v kateri imajo vsi objekti skupen čas spremembe. Prej je bil vsak nedosegljiv objekt shranjen v ločeni datoteki, kar je povzročalo težave, ko je bilo veliko novih nedosegljivih objektov, ki še niso bili primerni za izbris. V novi izdaji se za pakiranje nedosegljivih predmetov privzeto uporablja mehanizem »cruft packs«, ki omogoča shranjevanje vseh nedosegljivih predmetov v eno datoteko pakiranja, podatki o času spreminjanja vsakega predmeta pa se odražajo v ločeni tabeli, shranjeni v datoteki s pripono “.mtimes” in povezani z uporabo indeksne datoteke s pripono “.idx”.
    Na voljo je sistem za nadzor vira Git 2.41
  • Vzdrževanje obratnega indeksa na disku za datoteke paketa je privzeto omogočeno. Pri testiranju v repozitoriju torvalds/linux je uporaba povratnega indeksa omogočila 1.49-kratno pospešitev operacij »git push«, ki zahtevajo veliko virov, in preproste operacije, kot je izračun velikosti enega predmeta z uporabo »git cat- datoteka —batch='%(objectsize:disk)' "77-krat. Datoteke (“.rev”) z obratnim indeksom bodo shranjene v repozitoriju v imeniku “.git/objects/pack”.

    Spomnimo se, da Git shranjuje vse podatke v obliki objektov, ki se nahajajo v ločenih datotekah. Za povečanje učinkovitosti dela z repozitorijem so predmeti dodatno nameščeni v paketnih datotekah, v katerih so informacije predstavljene v obliki toka objektov, ki si sledijo (podoben format se uporablja pri prenosu objektov z git fetch in git push ukazi). Za vsako datoteko paketa se ustvari indeksna datoteka (.idx), ki vam omogoča, da zelo hitro določite odmik v datoteki paketa, na katerem je shranjen dani objekt z uporabo identifikatorja objekta.

    Povratni indeks, vključen v novo izdajo, je namenjen optimizaciji postopka določanja identifikatorja objekta iz informacij o umestitvi predmeta v datoteko paketa. Prej se je taka pretvorba izvajala sproti med razčlenjevanjem datoteke paketa in je bila shranjena samo v pomnilniku, kar ni omogočalo ponovne uporabe podobnih indeksov in je bilo treba indeks generirati vsakič. Operacija gradnje indeksa se zmanjša na sestavo niza parov objekt-položaj in njegovo razvrščanje po položaju, kar lahko traja dolgo časa za velike paketne datoteke.

    Na primer, operacija za prikaz vsebine objektov, ki uporablja neposredni indeks, je bila 62-krat hitrejša od operacije za prikaz velikosti objektov, za katere podatki o položaju do objekta niso bili indeksirani. Po uporabi obratnega indeksa so te operacije začele trajati približno enako časa. Povratni indeksi vam prav tako omogočajo, da pospešite operacije pošiljanja objektov pri izvajanju ukazov pridobivanja in potiskanja z neposrednim prenosom že pripravljenih podatkov z diska.

    Na voljo je sistem za nadzor vira Git 2.41

  • Protokol »pomočnik pri poverilnicah«, ki se uporablja za prenos poverilnic pri dostopu do skladišč z omejenim dostopom, ima dodano podporo za posredovanje glav WWW-Authenticate med obdelovalcem poverilnic in storitvijo, v kateri se izvaja preverjanje pristnosti. Podpora za glavo WWW-Authenticate vam omogoča posredovanje parametrov obsega OAuth za bolj natančno ločevanje uporabniškega dostopa do repozitorijev in razmejitev obsegov, ki so na voljo za zahteve.
  • Dodana možnost oblikovanja »%(ahead-behind:« ukazu for-each-ref: )«, ki vam omogoča, da takoj pridobite informacije o številu prisotnih ali odsotnih objav v določeni veji glede na drugo vejo (koliko ena veja zaostaja ali prehiteva drugo na ravni objave). Prej ste za pridobitev takšnih informacij morali zagnati dva ločena ukaza: »git rev-list —count main..my-feature«, da dobite število potrditev, edinstvenih za vejo, in »git rev-list —count my-feature ..main«, da dobite število manjkajočih potrditev. Zdaj je mogoče takšne izračune zmanjšati na en sam ukaz, kar poenostavi pisanje obdelovalcev in skrajša čas izvajanja. Če želite na primer prikazati veje, ki niso bile spojene, in oceniti, ali so za glavno vejo ali pred njo, lahko uporabite enovrstično: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(naprej-zadaj :origin/HEAD)' \refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—izključi 16 96 tb/roaring-bitmaps 47 3 namesto prej uporabljenega skripta, ki deluje 17-krat počasneje: $ 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" "$naprej" "$zadaj" končano | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—exclude 16 96 tb/roaring-bitmaps 47 3
  • Možnost “-porcelain” je bila dodana ukazu “git fetch”, ko je podana, se izhod ustvari v formatu “ ", manj berljiv, a bolj priročen za razčlenjevanje v skriptih.
  • Dodana nastavitev »fetch.hideRefs«, ki vam omogoča, da pospešite operacije »git fetch« tako, da skrijete nekatere reference v lokalnem repozitoriju na stopnji preverjanja, ali je strežnik poslal celoten nabor predmetov, kar prihrani čas omejitev preverjanja le na strežnike, iz katerih se podatki neposredno pridobijo. Na primer, pri izvajanju preizkusa v sistemu z repozitoriji, ki vsebujejo veliko število sledenih zunanjih povezav, je izključitev vseh povezav, razen tistih, naslovljenih na ciljni strežnik $remote, zmanjšala izvajanje operacije git fetch z 20 minut na 30 sekund. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Ukaz "git fsck" omogoča preverjanje poškodovanosti, skladnosti s kontrolno vsoto in pravilnosti vrednosti v bitnih slikah dostopnosti in obratnih indeksih.
  • Ukaz "git clone --local" zdaj prikaže napako pri poskusu kopiranja iz repozitorija, ki vsebuje simbolne povezave znotraj $GIT_DIR.

Vir: opennet.ru

Dodaj komentar