Utgivelse av Git 2.39 kildekontrollsystem

Etter to måneder med utvikling har det distribuerte kildekontrollsystemet Git 2.39 blitt utgitt. Git er et av de mest populære, pålitelige og høyytende versjonskontrollsystemene, og gir fleksible ikke-lineære utviklingsverktøy basert på forgrening og sammenslåing. For å sikre integriteten til historien og motstanden mot tilbakevirkende endringer, brukes implisitt hashing av hele den tidligere historien i hver forpliktelse; det er også mulig å sertifisere individuelle tagger og forpliktelser med digitale signaturer fra utviklerne.

Sammenlignet med forrige utgivelse inkluderte den nye versjonen 483 endringer, utarbeidet med deltagelse av 86 utviklere, hvorav 31 deltok i utviklingen for første gang. Hovedinnovasjoner:

  • "git shortlog"-kommandoen, beregnet for å vise sammendrag med statistikk fra endringshistorikken, har lagt til et "-group"-alternativ for vilkårlig gruppering av forpliktelser etter felt som ikke er begrenset til forfatter eller formidler. For eksempel, for å vise en liste over utviklere med informasjon om antall endringer, med tanke på hjelperne nevnt i "Co-authored-by"-feltet, kan du bruke kommandoen: git shortlog -ns --group=author - -group=trailer:co-authored-by

    Shortlog-utdata kan aggregeres ved hjelp av formateringsspesifikasjoner, og alternativet "--group" kan betydelig forenkle opprettingen av komplekse rapporter og eliminere behovet for ytterligere sorteringskommandoer. For eksempel, for å lage en rapport med informasjon om hvor mange commits for en gitt utgivelse som ble akseptert i hver måned, kan du spesifisere: git shortlog v2.38.0.. —date='format:%Y-%m' —group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Tidligere, for å utføre en lignende operasjon, ville det vært nødvendig å bruke sorterings- og uniq-verktøyene: git log v2.38.0. .. —date='format:%Y -%m' —format='%cd' | sortere | unik -c

  • Mulighetene til "cruft packs"-mekanismen, designet for å pakke uoppnåelige objekter som ikke er referert til i depotet (ikke referert av grener eller tagger), har blitt utvidet. Uoppnåelige objekter slettes av søppelsamleren, men forblir i depotet i en viss tid før de slettes for å unngå raseforhold. "Cruft packs"-mekanismen lar deg lagre alle uoppnåelige objekter i én pakkefil, og vise data om endringstiden for hvert objekt i en separat tabell, lagret i en separat fil med filtypen ".mtimes", slik at de gjør det ikke overlapper med den totale endringstiden.

    Hvor lang tid uoppnåelige objekter forblir i depotet før de faktisk slettes, bestemmes av "--prune="-alternativet. Men selv om utsettelse før sletting er en ganske effektiv og praktisk måte å forhindre korrupsjon av depot på grunn av raseforhold, er den ikke 100 % pålitelig. For å gjøre det enklere å gjenopprette et skadet depot, gir den nye utgivelsen muligheten til å lagre manglende objekter ved å legge til "--expire-to"-alternativet til "git repack"-kommandoen, som lar deg spesifisere en fil for å lage en ekstern kopi av alle slettede objekter. For å lagre uoppnåelige objekter som ikke har endret seg de siste 5 minuttene i backup.git-filen, kan du for eksempel bruke kommandoen: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Betraktelig økt (opptil 70%) hastigheten på "git grep -cached" operasjonen ved søk i områder som bruker delvis kloning (sparse-checkout) og som det er delvise indekser for (sparse index). Tidligere, når du spesifiserte "-cached"-alternativet, ble søket utført først i den vanlige indeksen, og deretter i de delvise, noe som førte til merkbare forsinkelser ved søk i store depoter.
  • Serverens verifisering av sammenhengen til nye objekter før de plasseres i depotet under "git push"-operasjonen har blitt fremskyndet. Ved å bytte til kun å ta regnskap for deklarerte lenker ved sjekking, i et testlager med 7 millioner lenker, hvorav kun 3 % dekkes av push-operasjonen, tillot optimaliseringene å redusere sjekktiden med 4.5 ganger.
  • For å beskytte mot potensielle heltallsoverløp i koden, begrenser "git application"-kommandoen maksimal størrelse på patcher som kan behandles. Hvis oppdateringsstørrelsen overstiger 1 GB, vil det nå vises en feil.
  • For å beskytte mot potensielle sårbarheter er det gjort endringer for å rydde opp i unødvendig informasjon fra overskriftene som er satt ved bruk av h2h3-modulen med GIT_TRACE_CURL=1- eller GIT_CURL_VERBOSE=1-alternativet sammen med HTTP/2.
  • Når du utfører en utsjekk på en gren som er en symbolsk lenke til en annen gren, viser kommandoen "git symbolic-ref HEAD" nå navnet på målgrenen i stedet for navnet på symbolkoblingen.
  • Lagt til støtte for @{-1}-argumentet til "--edit-description"-alternativet ("git branch —edit-description @{-1}") for å redigere beskrivelsen av en tidligere gren.
  • Lagt til kommandoen "git merge-tree --stdin" for å sende en liste over parametere via standardinndata.
  • På nettverksfilsystemer er fsmonitor-behandleren, som overvåker endringer i filsystemet, deaktivert som standard.

Kilde: opennet.ru

Legg til en kommentar