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