Git 2.41 bronbeheerstelsel beskikbaar

Na drie maande se ontwikkeling is die vrystelling van die verspreide bronbeheerstelsel Git 2.41 gepubliseer. Git is een van die gewildste, betroubare en hoëprestasie-weergawebeheerstelsels wat buigsame nie-lineêre ontwikkelingsinstrumente bied wat gebaseer is op vertakking en samesmelting van takke. Om die integriteit van die geskiedenis en weerstand teen terugwerkende veranderinge te verseker, word implisiete hashing van die hele vorige geskiedenis in elke commit gebruik, dit is ook moontlik om individuele etikette en commits te verifieer met digitale handtekeninge van die ontwikkelaars.

In vergelyking met die vorige weergawe, is 542 veranderinge in die nuwe weergawe aanvaar, voorberei met die deelname van 95 ontwikkelaars, waarvan 29 vir die eerste keer aan die ontwikkeling deelgeneem het. Belangrikste innovasies:

  • Verbeterde hantering van onbereikbare voorwerpe waarna nie in die bewaarplek verwys word nie (nie deur takke of etikette verwys nie). Onbereikbare voorwerpe word deur die vullisverwyderaar uitgevee, maar bly vir 'n sekere tyd in die bewaarplek voordat dit uitgevee word om wedrentoestande te vermy. Om die tydperk van voorkoms van onbereikbare voorwerpe op te spoor, is dit nodig om etikette aan hulle te heg met die tyd van verandering van soortgelyke voorwerpe, wat dit nie toelaat om dit in een paklêer te stoor waarin alle voorwerpe 'n gemeenskaplike veranderingstyd het nie. Voorheen is elke onbereikbare voorwerp in 'n aparte lêer gestoor, wat tot probleme gelei het toe daar 'n groot aantal vars onbereikbare voorwerpe was wat nog nie vir uitvee in aanmerking gekom het nie. In die nuwe weergawe word die "cruft packs"-meganisme by verstek gebruik vir die verpakking van onbereikbare voorwerpe, wat jou toelaat om alle onbereikbare voorwerpe in een paklêer te stoor, en data oor die wysigingstyd van elke voorwerp word in 'n aparte tabel gereflekteer, gestoor in 'n lêer met die uitbreiding ".mtimes" en gekoppel met 'n indekslêer met die uitbreiding ".idx".
    Git 2.41 bronbeheerstelsel beskikbaar
  • Die handhawing van 'n omgekeerde indeks op skyf vir paklêers is by verstek geaktiveer. Tydens toetsing op die torvalds/linux-bewaarplek, het die gebruik van 'n omgekeerde indeks dit moontlik gemaak om hulpbronintensiewe "git push"-bewerkings met 1.49 keer te versnel, en eenvoudige bewerkings soos die berekening van die grootte van 'n enkele voorwerp met behulp van "git cat- file —batch='%(objectsize:skyf)' "77 keer. Lêers (".rev") met 'n omgekeerde indeks sal binne die bewaarplek in die ".git/objects/pack"-gids gestoor word.

    Onthou dat Git alle data in die vorm van voorwerpe stoor, wat in aparte lêers geleë is. Om die doeltreffendheid van die werk met die bewaarplek te verhoog, word voorwerpe addisioneel in paklêers geplaas, waarin inligting aangebied word in die vorm van 'n stroom voorwerpe wat op mekaar volg ('n soortgelyke formaat word gebruik wanneer voorwerpe oorgedra word met die git fetch en git push opdragte). Vir elke paklêer word 'n indekslêer (.idx) geskep, wat jou in staat stel om baie vinnig die offset in die paklêer te bepaal waarteen die gegewe objek gestoor word deur die objekidentifiseerder te gebruik.

    Die omgekeerde indeks wat in die nuwe vrystelling ingesluit is, is daarop gemik om die proses van die bepaling van die objekidentifiseerder te optimaliseer uit inligting oor die plasing van die voorwerp in die paklêer. Voorheen is sulke omskakeling onmiddellik uitgevoer terwyl die paklêer ontleed is en is slegs in die geheue gestoor, wat nie toegelaat het dat soortgelyke indekse hergebruik word nie en gedwing het om die indeks elke keer te genereer. Die operasie van die bou van 'n indeks kom daarop neer om 'n verskeidenheid voorwerp-posisie-pare te konstrueer en dit volgens posisie te sorteer, wat 'n lang tyd kan neem vir groot paklêers.

    Byvoorbeeld, 'n bewerking om die inhoud van voorwerpe te vertoon, wat 'n direkte indeks gebruik, was 62 keer vinniger as 'n bewerking om die grootte van voorwerpe te vertoon, waarvoor die posisie-tot-objek-data nie geïndekseer is nie. Nadat die omgekeerde indeks gebruik is, het hierdie bewerkings ongeveer dieselfde tyd begin neem. Omgekeerde indekse laat jou ook toe om objekversending bedrywighede te versnel wanneer haal- en drukopdragte uitgevoer word deur klaargemaakte data direk vanaf skyf oor te dra.

    Git 2.41 bronbeheerstelsel beskikbaar

  • Die "credential helper"-protokol, wat gebruik word om geloofsbriewe oor te dra wanneer toegang tot bewaarplekke met beperkte toegang verkry word, het ondersteuning bygevoeg om WWW-Authenticate-opskrifte tussen die geloofsbriewehanteerder en die diens waarin stawing uitgevoer word, deur te gee. Ondersteuning vir die WWW-Authenticate-opskrif laat jou toe om OAuth-omvangparameters deur te gee vir 'n meer fyn skeiding van gebruikerstoegang tot bewaarplekke en afbakening van die bestekke wat beskikbaar is vir versoeke.
  • Het formatering opsie "%(ahead-behind:" by die for-each-ref opdrag gevoeg: )", wat jou toelaat om onmiddellik inligting te bekom oor die aantal commits teenwoordig of afwesig in 'n sekere tak, relatief tot 'n ander tak (hoeveel een tak agter of voor 'n ander is op die commit-vlak). Voorheen, om sulke inligting te bekom, moes jy twee afsonderlike opdragte uitvoer: "git rev-list —count main..my-feature" om die aantal commits uniek aan die tak te kry en "git rev-list —count my-feature ..main” om die getal ontbrekende commits te kry. Nou kan sulke berekeninge tot 'n enkele opdrag verminder word, wat die skryf van hanteerders vergemaklik en uitvoeringstyd verminder. Byvoorbeeld, om takke te wys wat nie saamgevoeg is nie en te evalueer of hulle agter of voor hul hooftak is, kan jy 'n eenlyn gebruik: $ git for-each-ref —no-merged=oorsprong/HEAD \ —format ='%(refname:short) %(ahead-behind :origin/HEAD)' \refs/heads/tb/ | kolom -t tb/cruft-ekstra-wenke 2 96 tb/vir-elke-ref—sluit 16 96 tb/brul-bitmaps 47 3 uit in plaas van die voorheen gebruikte skrip, wat 17 keer stadiger loop: $ git for-each-ref — format='%(refname:short)' —no-merged=oorsprong/HOOF \ refs/heads/tb | terwyl lees ref doen ahead="$(git rev-list -count origin/HEAD..$ref)" behind="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" klaar | kolom -t tb/cruft-ekstra-wenke 2 96 tb/vir-elke-ref—sluit 16 96 tb/brul-bitmaps uit 47 3
  • Die "-porselein" opsie is bygevoeg by die "git haal" opdrag, wanneer gespesifiseer, word die uitvoer gegenereer in die formaat " ", minder leesbaar, maar geriefliker om in skrifte te ontleed.
  • Het die "fetch.hideRefs"-instelling bygevoeg, wat jou toelaat om "git haal"-bewerkings te bespoedig deur sommige van die skakels in die plaaslike bewaarplek te versteek op die stadium van kontrolering dat die bediener 'n volledige stel voorwerpe gestuur het, wat tyd bespaar deur beperk die tjek slegs tot bedieners waarvandaan data direk herwin word. Byvoorbeeld, wanneer 'n toets uitgevoer word op 'n stelsel met bewaarplekke wat 'n groot aantal nagespoorde eksterne skakels bevat, het die uitsluiting van alle skakels behalwe dié wat aan die teikenbediener gerig is, $remote die uitvoering van die git haal-operasie van 20 minute tot 30 sekondes verminder. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ haal $remote
  • Die "git fsck"-opdrag bied die vermoë om te kyk vir korrupsie, kontrolesom-nakoming en korrektheid van waardes in toeganklikheid-bitmaps en omgekeerde indekse.
  • Die "git clone --local" opdrag vertoon nou 'n fout wanneer jy probeer kopieer vanaf 'n bewaarplek wat simlinks binne $GIT_DIR bevat.

Bron: opennet.ru

Voeg 'n opmerking