Git 2.51 forklaret: cruft-fri MIDX, path-walk-pakker, stash-udveksling og vejen til Git 3.0

Sidste ændring: 08/21/2025
Forfatter: C SourceTrail
  • Cruft-fri MIDX: ny ompakningsadfærd plus repack.MIDXMustContainCruft giver mindre og hurtigere multipakkeindekser.
  • Path-walk-pakning: --path-walk-tilstanden skaber ofte betydeligt mindre pakker med konkurrencedygtige timings.
  • Stash-udveksling: eksporter/importer stash-poster via referencer for at flytte arbejde sikkert mellem maskiner.
  • Værktøjer og roadmap: forbedrede cat-file- og Bloom-filtre; switch/restore stabiliseret; forberedelse til Git 3.0 (SHA-256, reftable).
Git 2.51

Git 2.51 er nu tilgængelig og bringer en bred vifte af forbedringer af ydeevne og brugervenlighed bidraget af mere end 91 udviklere, herunder 21 førstegangsbidragydere. Denne udgivelse fokuserer på lagereffektivitet, hurtigere læsning i store arkiver og bedre måder at flytte igangværende arbejde på tværs af maskiner uden at skulle hoppe gennem bøjler.

Nøgletemaer inkluderer cruft-fri multi-pack-indekser, en ny path-walk-pakker og et stash-udvekslingsformatDu vil også se stabile fremskridt mod stærkere kryptografiske standarder (SHA-256) og fremtidige ændringer planlagt til Git 3.0, plus pragmatisk forbedring af hverdagens VVS og porcelæn.

Cruft-fri multipakke-indekser

Git 2.51 funktioner

Store arkiver er afhængige af pakkefiler og MIDX (multipakkeindekser) for hurtigt at kunne løse objekter.Historisk set havnede uopnåelige objekter i "cruft-pakker" og var beregnet til at holde sig ude af MIDX. Men hvis et objekt, der engang var uopnåeligt, senere bliver tilgængeligt og kun befinder sig i en cruft-pakke, kan det ødelægge bitmap-antagelser og forsinke tingene.

Git 2.51 ændrer, hvordan ikke-cruft-pakker byggesUnder ompakning sikrer Git nu, at objekter, hvis eneste anden kopi er i en cruft-pakke, duplikeres til ikke-cruft-sættet, hvilket gør sættet lukket under tilgængelighed. I praksis muliggør dette mindre og hurtigere multipakkeindekser uden at gå på kompromis med korrektheden.

En ny konfiguration, repack.MIDXMustContainCruft, aktiverer denne strategi., lagring af cruft-pakker ud af MIDX, samtidig med at opslag holdes hurtige. GitHub rapporterer håndgribelige gevinster ved denne tilgang i et stort monorepo: MIDX-størrelsen faldt med ~38%, skrivninger var ~35% hurtigere, og læseydelsen forbedredes med omkring 5%.

Hvis din monorepo MIDX er blevet uhåndterlig, prøv en ompakning med den nye indstilling og mål opslags- og gennemgangsgevinster i dine CI- og udviklerarbejdsgange.

Mindre pakker med stivandring

Git 2.51 forbedringer

Valg af gode deltaer er kernen i kompakte pakkefilerTidligere udgivelser introducerede en revideret name-hash for at forbedre delta-parring, men Git 2.51 går endnu videre med en "path walk"-tilstand, der grupperer og udsender alle objekter fra den samme sti sammen og fuldstændigt omgår name-hash-heuristikker.

I mange repositorier producerer path walk betydeligt mindre pakker samtidig med at den forbliver konkurrencedygtig i runtime versus traditionelle revisionsordre-gennemgange. Det er især effektivt, når du har mange versioner af de samme filer, der udvikler sig langs ensartede stier.

At eksperimentere med det under ompakning, brug den nye indstilling på pakkeobjekter: --path-walkFor teams, der presser pakkestørrelser til det yderste, kan dette reducere netværksoverførsel og lokal lagring på én gang.

Stash-udvekslingsformat

Det har været besværligt at flytte gemmesteder mellem maskiner fordi stash commits er skjult bag en enkelt refs/stashGit 2.51 introducerer en variant, der repræsenterer flere stash-poster som en sekvens af commits, der er kædet sammen, så de opfører sig mere som en almindelig log.

Med det design kan du eksportere og importere stashes via almindelige referencer., push eller hent dem som grene eller tags, og bevar igangværende arbejde på tværs af miljøer uden ad hoc-patches eller tar-filer.

Eksempel på arbejdsgang til deling af et lager:

$ git stash export --to-ref refs/stashes/my-stash
$ git push origin refs/stashes/my-stash

# On another machine
$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Denne tilgang holder dit arbejde fra bunden organiseret og kontrollerbart, især i opsætninger på tværs af enheder eller når man overdrager WIP til en teamkammerat.

Skarpere VVS og ergonomi i hverdagen

cat-file bliver smartere I batchtilstande: Når der blev spurgt om en sti til et undermodul, returnerede pre-2.51-builds ofte "missing". Git 2.51 rapporterer nu objekttypen mere nyttigt (f.eks. "submodule"), hvilket hjælper scripts, der skal ræsonnere om indholdet af arkivet i stor skala.

Ændrede Bloom-filtre hjælper nu med flere stispecifikationer (f.eks, git log -- a b), hvilket udvider antallet af tilfælde, hvor historikgennemgange kan springe commits over med sikkerhed. Det er en praktisk hastighedsforøgelse for almindelige gennemgangs- og undersøgelsesmønstre.

git switch og git restore opgraderer fra eksperimentelIntroduceret som klarere, formålsbyggede alternativer til multirolle- git checkout, deres CLI anses nu for at være stabil fremadrettet.

git whatchanged er udfaset og planlagt til fjernelse i Git 3.0. Hvis du stadig stoler på det, kan det stadig kaldes bag det passende navngivne --i-still-use-this markér, mens du migrerer til git log --raw.

Mod Git 3.0: standardindstillinger og testbare, fejlbehæftede ændringer

Projektet fortsætter forberedelserne til, at SHA-256 og reftable-reference-backend'en bliver standardindstillinger i Git 3.0.I Git 2.51 oprettes repositories stadig med SHA-1 som standard, men mere intern VVS forstår SHA-256, hvilket letter eksperimentering og integrationsarbejde.

Hvis du vil have et eksempel på morgendagens standardindstillinger, du kan bygge med WITH_BREAKING_CHANGES at afprøve de indkommende adfærdsmønstre i kontrollerede miljøer. Hostingudbydere og værktøjsudviklere kan bruge dette til at afdække edge cases forud for det store skifte.

Det dobbelte mål er fortsat klartStyrk den kryptografiske base og moderniser referencer, samtidig med at bagudkompatibilitet opretholdes for det enorme økosystem, der er bygget på Gits nuværende antagelser.

Sprog- og procesopdateringer

På implementeringssiden fortsætter C99-adoptionen metodiskProjektet tillader nu bool nøgleord i hele kodebasen og dokumenterer, hvilke C99-funktioner der er i brug eller under evaluering, med portabilitet i tankerne for en bred compilermatrix.

Bidragsretningslinjerne har fået en inkluderende opdateringPatches behøver ikke længere at blive indsendt under en bidragyders juridiske navn, hvilket bringer Gits politik tættere på Linux-kernen og understøtter bidragydere, der foretrækker alternative identiteter.

Sådan prøver du overskriftsfunktionerne i dag

Aktivér den cruft-fri MIDX-strategi til slanke multipakkeindekser og hurtiglæsning:

$ git config --global repack.MIDXMustContainCruft true
$ git gc --cruft --aggressive

Ompakning med stivandring for at evaluere forskelle i pakkestørrelse og kørselstid:

$ git repack -ad
$ git pack-objects --path-walk --revs --stdout < .git/objects/pack/pack-list.txt > new.pack

Del et lager på tværs af maskiner med de nye eksport/import-underkommandoer:

$ git stash export --to-ref refs/stashes/feature-wip
$ git push origin refs/stashes/feature-wip

Alt fortaltGit 2.51 er en evolutionær udgivelse, der betaler sig i daglig brug: hurtigere og mere effektiv objekthåndtering; praktiske forbedringer til scripting og historikforespørgsler; en renere stash-workflow; og stabile fremskridt mod Git 3.0-æraen, hvor SHA-256 og reftable bliver normen.

Git 2.51
relateret artikel:
Git 2.51 lander med cruft-fri MIDX, path-walk-pakker, stash import/eksport og 3.0 groundwork
Relaterede indlæg: