Utgivelse av det distribuerte kildekontrollsystemet Git 2.31

Det distribuerte kildekontrollsystemet Git 2.31 er nå tilgjengelig. 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 679 endringer, utarbeidet med deltagelse av 85 utviklere, hvorav 23 deltok i utviklingen for første gang. Hovedinnovasjoner:

  • Lagt til kommandoen "git maintenance", som lar deg utføre periodisk arbeid på systemer som ikke støtter cron. Ved å bruke en ny kommando kan du for eksempel sørge for at pakkeprosessen for depotet kjøres med jevne mellomrom, slik at du ikke trenger å vente til depotet er låst når pakking utføres automatisk mens du kjører forskjellige kommandoer. Kommandoen "git maintenance" lar deg utføre optimaliseringer og operasjoner for å opprettholde den optimale strukturen til depotet i bakgrunnen, uten å blokkere den interaktive økten - en gang i timen jobbes det med å proaktivt laste ned ferske objekter fra det eksterne depotet og oppdatere fil med commit-grafen, og prosessen med å pakke depotet starter hver natt.
  • Lagt til støtte for å opprettholde en omvendt indeks (revindex) på disk for pakkefiler. Husk at Git lagrer all data i form av objekter, som ligger i separate filer. For å øke effektiviteten ved å jobbe med depotet, plasseres objekter i tillegg i pakkefiler, der informasjon presenteres i form av en strøm av objekter som følger hverandre (et lignende format brukes når objekter overføres med git fetch og git push kommandoer). For hver pakkefil opprettes det en indeksfil (.idx), som lar deg meget raskt bestemme offset i pakkefilen som det gitte objektet er lagret ved ved hjelp av objektidentifikatoren. Introdusert i Git 2.31, er den omvendte indeksen (.rev) rettet mot å optimalisere prosessen med å bestemme en objektidentifikator fra informasjon om plasseringen av et objekt i en pakkefil.

    Tidligere ble en slik konvertering utført umiddelbart mens pakkefilen ble analysert og ble bare lagret i minnet, noe som ikke tillot lignende indekser å bli gjenbrukt og tvang indeksen til å bli generert hver gang. Operasjonen med å bygge en indeks kommer ned til å konstruere en rekke objekt-posisjonspar og sortere den etter posisjon, noe som kan ta lang tid for store pakkefiler.

    For eksempel var en operasjon for å vise innholdet til objekter, som bruker en direkte indeks, 62 ganger raskere enn en operasjon for å vise størrelsen på objekter, som posisjon-til-objekt-data ikke ble indeksert for. Etter å ha brukt den omvendte indeksen, begynte disse operasjonene å ta omtrent samme tid. Omvendte indekser lar deg også fremskynde objektsendingsoperasjoner når du utfører hente- og push-kommandoer ved direkte å overføre ferdiglagde data fra disken. Som standard opprettes ikke omvendte indekser; for å generere dem må du aktivere "git config pack.writeReverseIndex true"-innstillingen og deretter pakke depotet med kommandoen "git repack -Ad".

  • Lagt til ytelsesoptimaliseringer basert på utseendet i commit-graf-filformatet, brukt for å optimalisere tilgangen til informasjon om commits, nye data om commit-generasjonsnummeret, som kan brukes til å fremskynde ytterligere operasjoner med commits.
  • Lagt til alternativer for å redefinere navnet på hovedgrenen som brukes som standard i nye repositories (init.defaultBranch-innstilling). Når du får tilgang til eksterne depoter, prøver git å sjekke ut grenen HEAD peker på, dvs. hvis den eksterne serveren bruker "main"-grenen som standard, vil "git clone"-operasjonen forsøke å sjekke ut "main" lokalt. Git 2.31 støtter nå denne typen utsjekking for tomme depoter. For eksempel, når du kloner et nytt depot lokalt før du legger til de første oppdateringene til det, vil den lokale kopien nå inneholde standard oppstrømsnavn som er satt på den eksterne serveren.
  • La til et --disk-bruk-alternativ til "git rev-list"-kommandoen for å gi et sammendrag av størrelsen på objekter.
  • I påvente av den kommende endringen av sammenslåingsstøtten, har gjenkjenning av nytt navn blitt betydelig optimalisert.
  • Støtte for det gamle PCRE1 regulære uttrykksbiblioteket er avviklet.
  • Det er mulig å med kraft forby bruken av forkortede lenker, uavhengig av hashing-algoritmen. Forbudet aktiveres ved å tilordne verdien "nei" til parameteren core.abbrev.
  • Lagt til "--path-format=(absolutt|relativ)"-alternativet til "git rev-parse"-kommandoen for å eksplisitt spesifisere om relative eller absolutte baner skal sendes ut.
  • Bash-fullføringsskript gjør det enkelt å legge til fullføringsregler for dine egne "git"-underkommandoer.
  • La til et --stdin-alternativ til "git bundle"-kommandoen for å lese referanser fra standardinndatastrømmen.
  • Et nytt alternativ er lagt til "git log"-kommandoen: "--diff-merges=" "
  • Lagt til "--deduplicatecan"-alternativet til "git ls-files"-kommandoen for å eliminere duplikatutdata.
  • Lagt til nye masker for å ekskludere en rekke forpliktelser - " ^!" og " ^- "
  • Lagt til "--left-only" og "--right-only"-alternativer til "git range-diff"-kommandoen for å vise bare én side av området som sammenlignes.
  • Lagt til --skip-to= alternativer til "git diff" og "git log" kommandoene " og "—rotate-to= » for å hoppe over eller flytte til slutten av startstiene.
  • Lagt til "--skip-to="-alternativet til "git difftool"-kommandoen » for å gjenoppta en avbrutt økt fra en tilfeldig bane.
  • Code-of-conduct, som definerer de grunnleggende prinsippene for å løse konfliktsituasjoner mellom utviklere, er oppdatert til versjon 2.0 (tidligere versjon 1.4 ble brukt).

    Kilde: opennet.ru

Legg til en kommentar