Git 2.41 -lähdeohjausjärjestelmä saatavilla

Kolmen kuukauden kehitystyön jälkeen hajautetun lähteen ohjausjärjestelmän Git 2.41 julkaisu on julkaistu. Git on yksi suosituimmista, luotettavimmista ja tehokkaimmista versionhallintajärjestelmistä, joka tarjoaa joustavia epälineaarisia kehitystyökaluja, jotka perustuvat haarautumiseen ja yhdistämiseen. Historian eheyden ja taannehtivien muutosten kestävyyden varmistamiseksi käytetään implisiittistä tiivistystä koko aikaisemmasta historiasta jokaisessa toimituksessa, on myös mahdollista varmentaa yksittäisiä tunnisteita ja sitoumuksia kehittäjien digitaalisilla allekirjoituksilla.

Edelliseen julkaisuun verrattuna uuteen versioon, joka valmistettiin 542 kehittäjän osallistuessa, hyväksyttiin 95 muutosta, joista 29 osallistui kehitykseen ensimmäistä kertaa. Tärkeimmät innovaatiot:

  • Parannettu sellaisten tavoittamattomien kohteiden käsittelyä, joihin ei viitata arkistossa (haaroihin tai tunnisteisiin ei viitata). Jätteenkeräilijä poistaa tavoittamattomat esineet, mutta ne pysyvät arkistoon tietyn ajan ennen poistamista kilpailuolosuhteiden välttämiseksi. Saavutamattomien kohteiden ajanjakson seuraamiseksi on tarpeen sitoa niihin tarrat samankaltaisten objektien vaihtoajalla, mikä ei mahdollista niiden tallentamista yhteen pakettitiedostoon, jossa kaikilla objekteilla on yhteinen vaihtoaika. Aiemmin jokainen tavoittamaton objekti oli tallennettu erilliseen tiedostoon, mikä johti ongelmiin, jos uusia tavoittamattomia kohteita, joita ei vielä poistettu, oli suuri määrä. Uudessa julkaisussa oletusarvoisesti "cruft packs" -mekanismia käytetään tavoittamattomien kohteiden pakkaamiseen, mikä mahdollistaa kaikkien tavoittamattomien kohteiden tallentamisen yhteen pakettitiedostoon ja kunkin objektin muokkausajan tietojen heijastamisen erilliseen taulukkoon, joka on tallennettu tiedosto, jonka tunniste on ".mtimes", ja linkitetty hakemistotiedostolla, jonka tunniste on ".idx".
    Git 2.41 -lähdeohjausjärjestelmä saatavilla
  • Oletusarvoisesti käänteisen indeksin (revindex) ylläpitäminen levyllä pakkaustiedostoille on käytössä. Kun testattiin torvalds/linux-arkistoissa, käänteisen indeksin käyttö antoi meille mahdollisuuden nopeuttaa resurssiintensiivisiä "git push" -toimintoja 1.49-kertaisesti ja yksinkertaisia ​​operaatioita, kuten yksittäisen objektin koon laskemista käyttämällä "git cat- file --batch='%(objectsize:disk)' » 77 kertaa. Tiedostot (.rev"), joissa on käänteinen indeksi, tallennetaan arkiston sisään ".git/objects/pack"-hakemistoon.

    Muista, että Git tallentaa kaikki tiedot objektien muodossa, jotka sijoitetaan erillisiin tiedostoihin. Arkiston kanssa työskentelyn tehostamiseksi objektit sijoitetaan lisäksi pakettitiedostoihin, joissa tiedot esitetään peräkkäin seuraavien objektivirtojen muodossa (samanlaista muotoa käytetään siirrettäessä objekteja git fetch ja git push-komennot). Jokaiselle pakettitiedostolle luodaan indeksitiedosto (.idx), jonka avulla voit nopeasti määrittää pakettitiedoston offsetin, johon objektitunniste tallentaa objektin.

    Uuteen julkaisuun sisältyvän käänteisen indeksin tarkoituksena on virtaviivaistaa objektin tunnuksen määrittämistä pakettitiedoston kohteen sijaintitiedoista. Aikaisemmin tällainen muunnos suoritettiin lennossa pakettitiedoston jäsentämisen aikana ja se tallennettiin vain muistiin, mikä ei sallinut tällaisten indeksien uudelleenkäyttöä ja pakotti indeksin luomaan joka kerta. Indeksin rakentaminen rajoittuu objekti-sijaintiparien muodostamiseen ja sen lajitteluun sijainnin mukaan, mikä voi kestää kauan suurilla pakettitiedostoilla.

    Esimerkiksi objektien sisällön näyttämistoiminto, jossa käytetään suoraa indeksiä, oli 62 kertaa nopeampi kuin niiden objektien koon näyttötoiminto, joiden sijainti-objekti-suhdetietoja ei indeksoitu. Käänteisen indeksin käytön jälkeen nämä toiminnot alkoivat kestää suunnilleen saman ajan. Käänteisten indeksien avulla voit myös nopeuttaa objektien lähettämistä suoritettaessa nouto- ja push-komentoja siirtämällä suoraan valmiita tietoja levyltä.

    Git 2.41 -lähdeohjausjärjestelmä saatavilla

  • Lisätty tuki WWW-Authenticate-otsikoiden välittämiselle valtuustietojen käsittelijän ja todennuspalvelun välillä "credential Helper" -protokollalle, jota käytetään valtuustietojen välittämiseen käytettäessä rajoitettuja tietovarastoja. WWW-Authenticate-otsikon tuen avulla voit välittää OAuth-laajuusparametreja, jotta voit erottaa käyttäjien pääsyn tietovarastoihin tarkemmin ja rajata pyyntöille käytettävissä olevat laajuudet.
  • Lisätty muotovaihtoehto "%(ahead-behind: )", jonka avulla voit saada välittömästi tietoa tietyssä haarassa olevien tai puuttuvien sitoumusten määrästä suhteessa toiseen haaraan (miten paljon yksi haara on jäljessä tai edellä toista sitoumusten tasolla). Aikaisemmin näiden tietojen saaminen edellytti kahta erillistä komentoa: "git rev-list --count main..my-feature" saadakseen haaralle ainutlaatuisten sitoumusten määrän, ja "git rev-list --count my-feature.. main" saadaksesi puuttuvien sitoumusten määrän. Nyt tällaiset laskelmat voidaan vähentää yhdeksi käskyksi, mikä yksinkertaistaa kirjoituskäsittelijöitä ja lyhentää suoritusaikaa. Jos haluat esimerkiksi näyttää yhdistämättömät haarat ja arvioida, ovatko ne päähaaran takana vai edellä, voit käyttää yksiviivaista: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | sarake -t tb/cruft-extra-tips 2 96 tb/for-each-ref—jätä pois 16 96 tb/roaring-bittikartat 47 3 aiemmin käytetyn skriptin sijaan, joka on 17 kertaa hitaampi: $ 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" "$edessä" "$takana" tehty | sarake -t tb/cruft-extra-vinkit 2 96 tb/jokaiselle viitteelle – poissulkeminen 16 96 tb/roaring-bittikartat 47 3
  • Lisätty "--porcelain" vaihtoehto "git fetch" -komentoon, joka tuottaa tulosteen muodossa " ”, vähemmän luettavissa, mutta helpompi jäsentää skripteissä.
  • Lisätty "fetch.hideRefs" -asetus nopeuttamaan "git fetch" -toimintoja piilottamalla osan linkeistä paikallisessa arkistossa varmistusvaiheessa, että palvelin lähetti kaikki objektit, mikä säästää aikaa rajoittamalla tarkistuksen vain palvelimiin. josta tiedot haetaan suoraan. Esimerkiksi kun testattiin järjestelmässä, jonka arkistot sisältävät suuren määrän seurattuja ulkoisia linkkejä, kaikkien muiden paitsi $remote kohdepalvelimelle osoitettujen linkkien poissulkeminen lyhensi "git fetch" -toimintoa 20 minuutista 30 sekuntiin. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • "git fsck" -komento toteuttaa kyvyn tarkistaa esteettömyysbittikarttojen ja käänteisten indeksien vioittuminen, tarkistussumman yhteensopivuus ja arvojen oikeellisuus.
  • "git clone --local" -komento näyttää nyt virheen yritettäessä kopioida arkistosta, joka sisältää symbolisia linkkejä sisällä $GIT_DIR.

Lähde: opennet.ru

Lisää kommentti