Det distribuerte kildekodekontrollsystemet Git 2.31 er nå tilgjengelig. Git er et av de mest populære, pålitelige og effektive versjonskontrollsystemene, og tilbyr fleksible ikke-lineære utviklingsverktøy basert på forgrening og sammenslåing av forgreninger. For å sikre integriteten til historikken og motstand mot tilbakevirkende endringer, brukes implisitt hashing av hele den tidligere historikken i hver commit, og det er også mulig å sertifisere individuelle tagger og commits med digitale signaturer fra utviklere.
Sammenlignet med forrige utgivelse inkluderer den nye versjonen 679 endringer utarbeidet med deltakelse fra 85 utviklere, hvorav 23 deltok i utviklingen for første gang. De viktigste nyvinningene er:
- Kommandoen «git maintenance» er lagt til, slik at du kan utføre periodisk arbeid på systemer som ikke støtter cron. Ved å bruke den nye kommandoen kan du for eksempel organisere en periodisk oppstart av pakkeprosessen for depotet, slik at du ikke trenger å vente på at depotet skal fullføre låsingen når du automatisk utfører pakking under oppstart av ulike kommandoer. Kommandoen «git maintenance» lar deg utføre optimaliseringer og operasjoner for å opprettholde den optimale depotstrukturen i bakgrunnen, uten å blokkere den interaktive økten – én gang i timen utføres arbeidet med å forebyggende laste ned nye objekter fra det eksterne depotet og oppdatere filen med commit-grafen, og hver natt startes pakkeprosessen for depotet.
- Lagt til støtte for å opprettholde en omvendt indeks (revindex) på disk for pakkefiler. La oss minne deg på at Git lagrer alle data i form av objekter, som plasseres i separate filer. For å forbedre effektiviteten i arbeidet med depotet plasseres objekter i tillegg i pakkefiler, der informasjonen presenteres som en strøm av objekter som følger etter hverandre (et lignende format brukes når du overfører objekter med kommandoene git fetch og git push). For hver pakkefil opprettes en indeksfil (.idx), som lar deg raskt bestemme forskyvningen i pakkefilen der objektet er lagret av objektidentifikatoren. Den omvendte indeksen (.rev) som foreslås i Git 2.31 har som mål å optimalisere prosessen med å bestemme objektidentifikatoren basert på informasjon om objektets plassering i pakkefilen.
Tidligere ble en slik transformasjon utført under parsing av pakkefilen og ble kun lagret i minnet, noe som ikke tillot gjenbruk av slike indekser og tvang indeksen til å bli generert hver gang. Operasjonen med å bygge en indeks kommer ned til å bygge en matrise av "objekt-posisjon"-par og sortere dem etter posisjon, noe som kan ta mye tid for store pakkefiler.
For eksempel ble operasjonen med å vise innholdet i objekter ved hjelp av en direkte indeks utført 62 ganger raskere enn operasjonen med å vise størrelsen på objekter, der dataene om forholdet mellom en posisjon og et objekt ikke ble indeksert. Etter bruk av en omvendt indeks begynte disse operasjonene å ta omtrent samme tid. Omvendte indekser lar deg også øke hastigheten på operasjonene med å sende objekter når du utfører hente- og push-kommandoene på grunn av direkte overføring av ferdige data fra disken. Som standard opprettes ikke omvendte indekser; for å generere dem må du aktivere innstillingen "git config pack.writeReverseIndex true" og deretter pakke depotet med kommandoen "git repack -Ad".
- La til ytelsesoptimaliseringer basert på tillegg av nye commit-generasjonsnummerdata til commit-graph-filformatet som brukes til å optimalisere tilgangen til commit-informasjon, som kan brukes til å øke hastigheten på ytterligere commit-operasjoner.
- Muligheten til å overstyre standardnavnet på hovedgrenen i nye repositorier (init.defaultBranch-innstillingen) er utvidet. Når git åpner eksterne repositorier, prøver den å hente grenen som HEAD peker til, dvs. hvis den eksterne serveren bruker «main»-grenen som standard, vil «git clone»-operasjonen forsøke å hente «main» lokalt. I Git 2.31 er støtte for denne typen henting nå også implementert for tomme repositorier. For eksempel, når man kloner et nytt repositorium lokalt før man legger til de første oppdateringene i det, vil den lokale kopien nå inneholde versjonen som er installert på den eksterne server Standardnavnet på hovedgrenen.
- Kommandoen «git rev-list» har nå et alternativ for «--disk-usage» som lar deg vise et sammendrag av størrelsen på objekter.
- I påvente av den kommende utskiftingen av sammenslåingsbackend, har navnegjenkjenningsdeteksjon blitt betydelig optimalisert.
- Støtte for det eldre PCRE1-biblioteket for regulære uttrykk er avviklet.
- Gir muligheten til å tvinge frem et forbud mot bruk av forkortede lenker, uavhengig av hashing-algoritmen. Forbudet aktiveres ved å tilordne verdien "no" til core.abbrev-parameteren.
- Kommandoen «git rev-parse» har nå et alternativ som heter «--path-format=(absolute|relative)» for å eksplisitt spesifisere om relative eller absolutte stier skal sendes ut.
- Bash-skript for fullføring av input gjør det nå enklere å legge til fullføringsregler for tilpassede 'git'-underkommandoer.
- Kommandoen «git bundle» har nå et «--stdin»-alternativ for å lese referanser fra standard input.
- Et nytt alternativ «--diff-merges=" har blitt lagt til i kommandoen «git log». ".
- La til alternativet "--deduplicatecan" i kommandoen "git ls-files" for å eliminere duplikater i utdata.
- Lagt til nye masker for å ekskludere en rekke commits - " ^!" og " ^- ".
- Kommandoen «git range-diff» har nå alternativene «--left-only» og «--right-only» for å vise bare én side av området som sammenlignes.
- --skip-to= alternativer lagt til i kommandoene 'git diff' og 'git log' " og "—roter-til-= » for å hoppe over eller gå til slutten av de første stiene.
- Kommandoen «git difftool» har nå alternativet «--skip-to=» » for å gjenoppta en avbrutt økt fra en vilkårlig bane.
- Adferdsreglene, som definerer de grunnleggende prinsippene for å løse konfliktsituasjoner mellom utviklere, er oppdatert til versjon 2.0 (tidligere ble versjon 1.4 brukt).
Kilde: opennet.ru
