Git 2.41 kildekontrolsystem tilgængeligt

Efter tre måneders udvikling er udgivelsen af ​​det distribuerede kildekontrolsystem Git 2.41 blevet offentliggjort. Git er et af de mest populære, pålidelige og højtydende versionskontrolsystemer, der giver fleksible ikke-lineære udviklingsværktøjer baseret på forgrening og sammenlægning af grene. For at sikre historiens integritet og modstand mod retroaktive ændringer, anvendes implicit hashing af hele den tidligere historie i hver commit, det er også muligt at verificere individuelle tags og commits med digitale signaturer fra udviklerne.

Sammenlignet med den tidligere udgivelse blev 542 ændringer accepteret i den nye version, udarbejdet med deltagelse af 95 udviklere, hvoraf 29 deltog i udviklingen for første gang. Vigtigste innovationer:

  • Forbedret håndtering af uopnåelige objekter, der ikke refereres til i repository (grene eller tags refereres ikke). Uopnåelige genstande fjernes af skraldeopsamleren, men forbliver i depotet i en vis tid før de fjernes for at undgå løbsforhold. For at holde styr på perioden med uopnåelige objekter, er det nødvendigt at binde etiketter til dem med ændringstidspunktet for lignende objekter, hvilket ikke tillader at gemme dem i én pakke-fil, hvor alle objekter har en fælles ændringstid. Tidligere blev hvert uopnåeligt objekt gemt i en separat fil, hvilket førte til problemer, hvis der var et stort antal friske uopnåelige objekter, som endnu ikke var genstand for sletning. I den nye udgivelse bruges "cruft packs"-mekanismen som standard til at pakke uopnåelige objekter, hvilket gør det muligt at gemme alle uopnåelige objekter i en pakkefil og afspejle dataene om ændringstiden for hvert objekt i en separat tabel gemt i en fil med filtypen ".mtimes" og linket ved hjælp af en indeksfil med filtypen ".idx".
    Git 2.41 kildekontrolsystem tilgængeligt
  • Som standard er vedligeholdelse af et omvendt indeks (revindex) på disken for pakkefiler aktiveret. Når det blev testet på torvalds/linux-depoterne, tillod brugen af ​​et omvendt indeks os at fremskynde ressourcekrævende "git push"-operationer med 1.49 gange, og simple operationer, såsom at beregne størrelsen af ​​et enkelt objekt ved hjælp af "git cat- fil --batch='%(objektstørrelse:disk)' » 77 gange. Filer (".rev") med et omvendt indeks vil blive gemt inde i depotet i mappen ".git/objects/pack".

    Husk at Git gemmer alle data i form af objekter, som er placeret i separate filer. For at øge effektiviteten af ​​arbejdet med depotet placeres objekter desuden i pakkefiler, hvor information præsenteres i form af en strøm af objekter, der følger efter hinanden (et lignende format bruges ved overførsel af objekter med git fetch og git push-kommandoer). Der oprettes en indeksfil (.idx) for hver pakkefil, som giver dig mulighed for meget hurtigt at bestemme forskydningen i pakkefilen, hvormed det givne objekt lagres af objektidentifikatoren.

    Det omvendte indeks inkluderet i den nye udgivelse har til formål at strømline processen med at bestemme objekt-id'et ud fra information om objektets placering i pakkefilen. Tidligere blev en sådan konvertering udført på flugt under parsingen af ​​pakkefilen og blev kun gemt i hukommelsen, hvilket ikke tillod genbrug af sådanne indekser og tvang indekset til at blive genereret hver gang. Opbygningen af ​​et indeks reduceres til at bygge en række objekt-position-par og sortere det efter position, hvilket kan tage lang tid for store pakkefiler.

    For eksempel var operationen med at vise indholdet af objekter, som bruger et direkte indeks, 62 gange hurtigere end operationen med at vise størrelsen af ​​objekter, for hvilke position-til-objekt relationsdata ikke blev indekseret. Efter at have brugt det omvendte indeks begyndte disse operationer at tage omtrent samme tid. Omvendte indekser giver dig også mulighed for at fremskynde driften af ​​at sende objekter, når du udfører hente- og push-kommandoer ved direkte at overføre færdige data fra disken.

    Git 2.41 kildekontrolsystem tilgængeligt

  • Tilføjet understøttelse til at overføre WWW-Authenticate-headers mellem legitimationsbehandleren og godkendelsestjenesten til "credential helper"-protokollen, der bruges til at videregive legitimationsoplysninger, når der tilgås begrænsede lagre. Understøttelse af WWW-Authenticate-headeren tillader, at OAuth-omfangsparametre sendes til mere detaljeret adskilt brugeradgang til lagre og afgrænser de omfang, der er tilgængelige for anmodninger.
  • Tilføjet formatindstilling "%(ahead-behind: )", som giver dig mulighed for med det samme at få information om antallet af tilstedeværende eller fraværende commits i en bestemt gren, i forhold til en anden gren (hvor meget en gren halter bagud eller foran en anden på niveauet af commits). Tidligere krævede det to separate kommandoer at få denne information: "git rev-list --count main..my-feature" for at få antallet af commits, der er unikke for en branch, og "git rev-list --count my-feature. main" for at få antallet af manglende commits. Nu kan sådanne beregninger reduceres til en enkelt kommando, hvilket forenkler skrivebehandlere og reducerer eksekveringstiden. For for eksempel at vise usammenflettede grene og vurdere, om de er bagud eller foran deres hovedgren, kan du bruge en one-liner: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | kolonne -t tb/cruft-extra-tips 2 96 tb/for-each-ref—ekskluder 16 96 tb/roaring-bitmaps 47 3 i stedet for det tidligere brugte script, som er 17 gange langsommere: $ git for-each-ref - format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | mens læs ref do ahead="$(git rev-list --count origin/HEAD..$ref)" behind="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" færdig | kolonne -t tb/cruft-extra-tips 2 96 tb/for-hver-ref—ekskluder 16 96 tb/brølende-bitmaps 47 3
  • Tilføjet "--porcelæn"-mulighed til kommandoen "git fetch", som genererer output i formatet " ”, mindre læsbar, men mere praktisk til at parse i scripts.
  • Tilføjet "fetch.hideRefs"-indstilling for at fremskynde "git fetch"-operationer ved at skjule en del af links i det lokale lager på tidspunktet for at kontrollere, om serveren sendte det fulde sæt af objekter, hvilket sparer tid ved at begrænse kontrollen til kun servere hvorfra data er direkte hentet. For eksempel, når man tester på et system med repositories, der indeholder et stort antal sporede eksterne links, reducerede man ekskludering af alle links undtagen dem, der er adresseret til $remote target-serveren, "git fetch"-operationen fra 20 minutter til 30 sekunder. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ hente $remote
  • Kommandoen "git fsck" implementerer evnen til at kontrollere for korruption, checksum-matchning og korrekthed af værdier i tilgængelighedsbitmaps og omvendte indekser.
  • Kommandoen "git clone --local" viser nu en fejl, når du prøver at kopiere fra et lager, der indeholder symbolske links inde i $GIT_DIR.

Kilde: opennet.ru

Tilføj en kommentar