Git 2.55

Præsenteret udgivelsen af et distribueret system til styring af kildekoder Git 2.55. Blandt de vigtigste ændringer: standardinkludering af en samling med Rust, implementering af processen fsmonitor for Linux, en ny strategi for genpakning af inkrementelt MIDX-indeks, git history fixup-kommando for at rette et commit, optimering af generering af bitmap over objektadgang, understøttelse af parallel kørsel af hooks, git format-rev-kommando. Git-kode distribueres under GPLv2+ licensen.

Sammenlignet med den tidligere udgave er der i den nye version blevet accepteret 505 ændringer, forberedt med bidrag fra 100 udviklere, hvoraf 33 deltager i udviklingen af Git for første gang.

Hovednyhederne (github.blog, gitlab.com/blog, gitlab.com/git-scm):

  • By default er understøttelse af komponenter skrevet i Rust. Compileren rustc tilføjet blandt de byggedependens. For at bygge uden Rust kan du bruge flaget NO_RUST=1, når du kører make-værktøjet, eller -Drust=disabled, når du udfører meson configure. Muligheden for at deaktivere bygning med Rust vil blive understøttet indtil Git 3.0, hvor Rust vil være aktiveret blandt de nødvendige afhængigheder. En lagdelingsfunktion er implementeret på Rust for at sikre portabilitet mellem konfigurationer med SHA-1 og SHA-256 hashes samt nogle interne funktioner som kodning og afkodning af heltalsværdier med variabel længde. I fremtiden forventes en større omarbejdning af flere interne Git-komponenter i Rust.
  • I det eksperimentelle team "git history", der giver muligheder for at omskrive ændringshistorik, er 'git history fixup'-operationen blevet tilføjet for at rette et commit. Fixup-operationen gør det muligt at flytte ændringer tilføjet via git add til et tidligere commit og automatisk omskrive alle efterfølgende commits i lighed med at køre git commit —fixup= og starte git rebase —autosquash ~.
  • For Linux-platformen er der implementeret en baggrundsproces fsmonitor, der overvåger ændringer i filsystemet ved hjælp af mekanismen inotify og som muliggør, at hele arbejdsbiblioteket ikke skal gennemses ved udførelse af kommandoer som git status. Aktivering sker gennem indstillingen "core.fsmonitor».
  • Git-kommandoen repack har fået tilføjet en ny tilstand —write-midx=incremental, som implementerer en ny strategi for opdatering af metadata i det inkrementelle MIDX-indeks (multi-pack index), der gør det muligt at undgå at skulle ompakke hele indekset. I det inkrementelle multipack indeks anvendes et lagdelt system i stedet for ét stort indeks, som indeholder oplysninger om fordelingen af objekter mellem pack-filer; hvert lag dækker et bestemt antal pack-filer og opbevares i en separat bitmap-fil. En sådan struktur muliggør tilføjelsen af data om objekter i nye pack-filer til indekset ved at knytte nye lag til indekset uden at skulle ombygge de eksisterende lag. Git-kommandoen repack —write-midx=incremental gør det muligt at tilføje et nyt lag til det inkrementelle MIDX-indeks, som dækker de nyligt oprettede pack-filer. I kombination med tilstanden for repository-pakkning —geometric giver den nye kommando mulighed for at samle nye objekter fra flere pack-filer i én større pack-fil og, hvis nødvendigt, udføre pakning og sammenlægning af flere tilstødende lag i det inkrementelle MIDX-indeks. En sådan strategi muliggør ved udførelse af git repack kun at skrive de øverste lag, hvilket efterlader de gamle, store lag uskadt, og også forhindrer ukontrolleret vækst af lagkæden ved at holde det samlede antal lag på et niveau, der er proportional med logaritmen af det samlede antal objekter.
  • Genereringen af bitkort for tilgængelighed af objekter er blevet markant optimeret ved hjælp af en ny algoritme til gennemgang af objekttræet, der udelukker unødig rekursion, cacher positioner af objekter, sorterer bitkortene før deres sammenlægning med XOR-operation og omarbejder koden til oprettelse af bitkort for pseudodiløsning (pseudo-merge). I det testede repository har optimeringerne gjort det muligt at reducere tiden til generering af bitkort fra 612 til 294 sekunder.
  • Muligheden for parallel udførelse af uafhængige hooks i konfigurationsfilerne. Hooks, der påvirker den fælles tilstand eller tager højde for den, for eksempel ændrer kommentarer til commits eller inspicerer indekser og arbejdsområder, kan ikke køre samtidig. Imidlertid kan hooks til linsecheck og enhedstestning køre parallelt. Hooks, der tillader parallel eksekvering, konfigureres via parameteren hook.hook_navn.parallel = true. Antallet af varer, der kører samtidig, bestemmes gennem indstillingen hook.jobs, hook.<event>.jobs eller kommandolinjeindstillingen -j.
  • I git pack-objects-kommandoen er der implementeret en mulighed for at angive filtre, såsom blob:none, blob:limit=<n>, tree:0, object:type=<type>, sparse:<oid> og combine:. I en udført test gjorde udelukkelsen af blobs under udførelsen af —path-walk det muligt at reducere størrelsen af den genererede pack-fil med 16%.
  • Kommandoen git format-rev er tilføjet til at formatere revisioner og objektnavne, der nævnes i commit-lister eller optræder i tilfældig tekst (f.eks. kan den bruges i hooks til behandling af commit-kommentarer).

git last-modified | git format-rev —stdin-mode=text —format=%an

Junio C Hamano builtin/commit.c

  • De fleste kontrolsekvenser til terminalen er som standard aktiveret i informationsmeddelelser og fejlmeddelelser, der sendes af serveren. Når der er forbindelse til en ondsindet server, kunne sådanne escape-sekvenser bruges til at skjule eller ændre output, for eksempel ved hjælp af escape-sekvenser til at flytte cursoren og rydde tekst. Understøttelse af escape-sekvenser til farvefremhævning er stadig tilbageholdt.
  • Kommandoen git checkout -m gemmer nu automatisk konfliktfyldte lokale ændringer i stash-området uden at skulle løse konflikten med det samme.
  • Der er tilføjet en funktion til git push-kommandoen, som gør det muligt at sende en gren til flere eksterne Git-servere med én kommando. For eksempel kan man oprette en publish-gruppe af servere som github, gitlab og mirror for at overføre main-grenen til både hovedserveren og dens spejle:

git config remotes.publish "github gitlab mirror"
git push publish main

  • Der er tilføjet en option —graph-lane-limit=<N> til git log —graph-kommandoen for at begrænse antallet af vertikale strimler under visualisering af grene, hvilket gør det muligt at efterlade plads på skærmen til oplysninger om commits i repositories med et stort antal grene.

…
* | | | | 619931f561 Merge branch ‘dl/posix-unused-warning-clang’
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: forenkle GIT_GNUC_PREREQ() sammenligning
| * | | | ~ ffd45926dc compat/posix.h: rydde op i GIT_GNUC_PREREQ() og UNUSED
|\ \ \ \ \~
| * | | | ~ 3f5203eeb4 ls-files: filtrer pathspec før lstat

  • Til kommandoerne git log og git rev-list er der tilføjet en option —max-count-oldest=, der gør det muligt at vælge de N ældste commits i intervallet.

Kilde: linux.org.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster