Udgivelsen af Git 2.55 med standardunderstøttelse af Rust

Git 2.55 er blevet frigivet, en distribueret kildekodehåndteringssystem. Blandt de vigtigste ændringer er: standardaktiveret bygning med Rust, implementering af fsmonitor-processen for Linux, en ny ompakningsstrategi for den inkrementelle MIDX-indeks, kommandoen «git history fixup» til at rette en commit, optimering af genereringen af tilgængeligheds bitmap, understøttelse af parallelt kørende hooks, kommandoen «git format-rev». Koden til Git distribueres under GPLv2+ licensen.

Sammenlignet med den tidligere udgave er der i den nye version accepteret 505 ændringer, forberedt med deltagelse af 100 udviklere, hvoraf 33 deltager i udviklingen af Git for første gang. De vigtigste nyheder (1, 2, 3):

  • Support for komponenter skrevet i Rust er aktiveret som standard. Kompilatoren rustc
    er blevet tilføjet til mængden af byggeafhængigheder. For at bygge uden Rust kan du bruge flaget «NO_RUST=1» ved kørsel af make-kommandoen eller «-Drust=disabled» ved udførelse af «meson configure». Muligheden for at deaktivere bygningen med Rust vil blive understøttet indtil Git 3.0, hvor Rust vil blive en obligatorisk afhængighed. Der er udviklet et lag i Rust for at sikre portabilitet mellem konfigurationer med SHA-1 og SHA-256 hashes samt nogle interne funktioner, såsom kodning og dekodning af heltal med variabel længde. I fremtiden forventes en genberegning af flere væsentlige interne komponenter i Git til Rust.
  • Den eksperimentelle kommando «git history», som tilbyder muligheden for at omskrive ændringshistorikken, har fået operationen «git history fixup» til at rette en commit. Operationen «fixup» tillader at flytte ændringer tilføjet via «git add» til en tidligere commit og automatisk omskrive alle efterfølgende commits ligesom ved at køre kommandoen «git commit —fixup=<commit>» og starte «git rebase —autosquash <commit>~».
  • For Linux-platformen er der implementeret en baggrundsproces fsmonitor, der overvåger ændringer i filsystemet ved hjælp af inotify-mekanismen og gør det muligt at undgå at gennemgå hele arbejdsbiblioteket ved udførelse af kommandoer som «git status». Aktiveres gennem indstillingerne «core.fsmonitor».
  • I kommandoen «git repack» er der tilføjet en tilstand «—write-midx=incremental», der implementerer en ny strategi til opdatering af metadata i den inkrementelle MIDX-index (multi-pack index), som gør det muligt at undgå at repacke hele indekset. I det inkrementelle multipack-indeks anvendes der i stedet for et stort indeks, der indeholder oplysninger om distributionen af objekter i pack-filer, en lagdeling — hvert lag dækker et bestemt antal pack-filer og opbevares i en separat bitmap-fil. En sådan struktur muliggør tilføjelse af data om objekter i nye pack-filer til indekset ved at vedhæfte nye lag uden at ombygge de allerede eksisterende lag.

    Kommandoen «git repack —write-midx=incremental» gør det muligt at tilføje et nyt lag til den inkrementelle MIDX-index, der dækker nyligt oprettede pack-filer. I kombination med tilstanden til repository-packing «—geometric» giver den nye kommando mulighed for at samle nye objekter fra flere pack-filer til én større pack-fil og om nødvendigt udføre pakning og sammenlægning af flere nærliggende lag i den inkrementelle MIDX-index. En sådan strategi muliggør, at ved udførelse af «git repack» kun de øverste lag bliver omskrevet, mens de gamle, store lag forbliver urørte, samt undgår ukontrolleret vækst af lagkæden, samtidig med at det samlede antal lag holdes på et niveau proportionalt med logaritmen af det samlede antal objekter.

  • Genereringen af bitmapkort til tilgængelighed af objekter er blevet betydeligt optimeret takket være en ny algoritme til traversal af objekternes træ, der udelukker unødvendig rekursion, cacher objektpositioner, sorterer bitmapkortene før deres sammensætning via XOR-operationen og reviderer koden til at skabe bitmapkort til pseudosammenlægning (pseudo-merge). I det testede repository gjorde optimeringerne det muligt at reducere tiden til generering af bitmapkort fra 612 til 294 sekunder.
  • Muligheden for parallel udførelse af uafhængige hooks i konfigurationsfiler er blevet implementeret. Hooks, der påvirker delt tilstand eller tager højde for den, såsom dem, der ændrer commit-kommentarer eller inspicerer indeks og arbejdstræ, kan ikke køre parallelt. Dog kan hooks til lintrensning og enhedstestning køre parallelt. Hooks, der tillader parallel udførelse, konfigureres via parameteren «hook.naam_huk.parallel = true». Antallet af samtidige jobs bestemmes af indstillingen hook.jobs, hook.<event>.jobs eller kommandolinjens option «-j».
  • I kommandoen «git pack-objects —path-walk» er det blevet muligt at angive filtre såsom «blob:none», «blob:limit=<n>», «tree:0», «object:type=<type>», «sparse:<oid>» og «combine:». I den udførte test førte sorteringen af blobs under «—path-walk» til en reduktion af størrelsen på den dannede pack-fil med 16%.
  • Kommandoen «git format-rev» er blevet tilføjet for at formatere revisioner og objektnavne, der nævnes i commit-lister eller optræder i vilkårlig tekst (for eksempel 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

  • Som standard er de fleste kontrolsekvenser i terminalen blevet undsluppet i informationsmeddelelser og fejltekster, der overføres serveren. Ved adgang til ondsindede server sådanne escape-sekvenser kunne anvendes til at skjule eller ændre output, for eksempel gennem escape-sekvenser til at flytte markøren og rense teksten. Understøttelse af escape-sekvenser til at fremhæve elementer med farve er blevet bevaret.
  • Kommandoen «git checkout -m» gemmer nu automatisk konfliktfyldte lokale ændringer i stash-området uden nødvendigheden af straks at løse konflikten.
  • I kommandoen «git push» er muligheden for at sende en gren til flere eksterne Git-servere med én kommando blevet tilføjet. For eksempel, for at sende hovedgrenen ikke kun til hovedserveren, men også til spejle, kan man oprette en gruppe «publish» bestående af servere «github», «gitlab» og «mirror»:

    git config remotes.publish «github gitlab mirror»
    git push publish main

  • I kommandoen «git log —graph» er der tilføjet en mulighed «—graph-lane-limit=<N>» for at begrænse antallet af lodrette linjer ved visualisering af grene, hvilket muliggør optagelse af 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

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

Kilde: opennet.ru

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