Git 2.51 lander med cruft-fri MIDX, path-walk-pakker, stash import/eksport og 3.0 groundwork

Sidste ændring: 08/21/2025
Forfatter: C SourceTrail
  • Nye cruft-fri multipakkeindekser med repack.MIDXMustContainCruft reducer MIDX-størrelsen og øg læsningshastigheden.
  • Ompakning af stier og gangstier (--path-walk) producerer mindre pakker med konkurrencedygtige timings.
  • Stash-udvekslingsformatet muliggør eksport/import af stashes som referencer på tværs af maskiner.
  • Fremskridt mod Git 3.0: SHA-256 og reftable-standarder er angivet; polering af brugergrænseflade og værktøjer.

Visuel udgivelse af Git 2.51

Git 2.51 er ude, hvilket indebærer en bred vifte af forbedringer fra mere end 91 bidragydere (inklusive 21 førstegangsbrugere) og et fortsat pres for at modernisere værktøjet uden at forstyrre etablerede arbejdsgange.

Denne udgivelse fokuserer på praktiske opgraderinger—fra opbevaring og pakning til brugervenlighed og sikkerhedstilstand — samtidig med at sporene lægges for ændringer, der er planlagt til Git 3.0.

Cruft-fri multipakke-indekser

Git gemmer data som objekter (blobs, træer, commits) enten løst eller inde i pakkefiler, hvor pakkeindekser knytter hashes til offsets. Multipakkeindekser (MIDX) lader Git indeksere objekter på tværs af mange pakker, hvilket gør mange opslag til en enkelt O(log N) søgning, og de driver også tilgængelighedsbitmaps til hurtige indeslutningstjek.

Rynken har været cruft-pakker, hvor utilgængelige objekter befinder sig uden for MIDX. Hvis et objekt, der engang var utilgængeligt, senere bliver tilgængeligt fra en bitmap-commit, men kun findes i en cruft-pakke, har det ingen bitposition – hvilket blokerer bitmap-generering.

Git 2.51 ændrer genpakningsadfærd således at når der genereres nye ikke-cruft-pakker, duplikerer den objekter (og deres forfædre), hvis eneste anden kopi findes i en cruft-pakke. Gentagelse af dette sikrer, at ikke-cruft-sættet er lukket under tilgængelighed, hvilket muliggør ensartet bitmap-dækning.

En ny konfiguration gør det nemt: repack.MIDXMustContainCruft bruger den opdaterede repack-logik til at holde cruft-pakker uden for MIDX. Ved storstilet brug krympede MIDX-filer med omkring 38 %, blev skrevet ~35 % hurtigere og forbedrede læseydelsen med cirka 5 %.

Mindre pakker med stivandring

Git 2.49 introducerede en bedre navne-hash til rækkefølge af objekter under delta-valg, reduktion af afhængigheden af ​​de sidste 16 stitegn og overvejelse af mappestruktur for smartere parring.

Git 2.51 går videre med en ny "path walk"-indsamlingstilstand til genpakning. I stedet for at udsende objekter udelukkende i revisionsrækkefølge, grupperer og udsender Git alle objekter for en given sti sammen, hvilket omgår behovet for navne-hash-heuristikker.

Resultatet er slankere pakkefiler med forbedrede delta-muligheder blandt objekter i samme bane og timings, der er konkurrencedygtige med den klassiske traversering. Du kan prøve det med den nye --path-walk mulighed ved ompakning.

Oversigt over Git 2.51-funktioner

Stash-udvekslingsformat

Hvis du bruger git stash hyppigt, du ved, at den traditionelt modellerer hver stash som tre commits (staged, unstaged og en syntetisk forælder, der binder dem sammen) gemt under refs/stash, hvilket gør migrering på tværs af maskiner besværlig.

Git 2.51 tilføjer en kædet repræsentation hvor hver stash-post inkluderer yderligere forældreskab, der linker til den forrige stash-post, hvilket danner en lineær historik, der er nemmere at flytte og administrere.

Nye underkommandoer giver mulighed for portabilitetDu kan eksportere stashes til en enkelt reference og pushe/pull dem som enhver branch eller tag, og derefter importere dem på en anden maskine.

Eksempel på arbejdsgang:

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

$ git fetch origin '+refs/stashes/*:refs/stashes/*'
$ git stash import refs/stashes/my-stash

Ydelsesnoter for store lagre

Referenceopdateringer skaleres bedre i arkiver med et meget stort antal referencer, takket være batchopdateringer, der reducerer transaktionsomkostninger. I scenarier med ~10,000 referencer omfatter de rapporterede gevinster dramatiske hastighedsforøgelser - især med den reftable-baserede backend - på operationer som fetch og push.

Værktøjsfremstilling og UX-polering

  • git cat-file er mere informativ for undermodulstier i --batch-check tilstand, hvor en undermodulpost rapporteres i stedet for bare at være "manglende".
  • Bloom-filtre med ændret sti hjælper nu med flere stispecifikationer (f.eks. git log -- a b), hvilket udvider optimeringens rækkevidde.
  • git switch og git restore er stabile og ikke længere betragtes som eksperimentelle, hvilket cementerer deres roller som klarere alternativer til git checkout.
  • git whatchanged er udfaset og planlagt til fjernelse i Git 3.0; den forbliver tilgængelig bagefter --i-still-use-this.
  • git for-each-ref tilføjer paginering via --start-after, forbedrer referenceliste i meget store arkiver.
  • Sammenlægning giver et mere ryddeligt resumé med --compact-summary forum git merge og git pull.

Mod Git 3.0: standardindstillinger for sikkerhed og lagring

Projektet fortsætter sin SHA-256-overgangSelvom nye repositories stadig er SHA-1 som standard i dag, forstår flere interne og transports i 2.51 SHA-256, hvilket letter eksperimentering og kompatibilitetstest.

Reftable er på vej til at blive standarden reference-backend i Git 3.0, der adresserer store og små bogstaver og Unicode-faldgruber på Windows/macOS, muliggør atomare reference-transaktioner og drager fordel af geometrisk komprimering og præfikskomprimering.

Vil du have et eksempel på fremtidige standardindstillinger? Du kan bygge Git med WITH_BREAKING_CHANGES at teste den kommende baseline (f.eks. SHA-256 og reftable defaults) før 3.0-udgivelsen.

Udviklerproces og standarder

C99-brugen udvides: kodebasen tillader nu bredt set bool nøgleord, og projektet dokumenterer hvilke C99-funktioner der er implementeret eller under evaluering, og balancerer moderne sprogfunktioner med portabilitet.

Retningslinjer for bidrag udvikler sig at tillade indsendelser under andre identiteter end en bidragyders juridiske navn, i højere grad tilpasset Linux-kernens tilgang og sænke barriererne for deltagelse.

Git 2.51 blander konkrete gevinster – som cruft-fri MIDX, path-walk-pakker, import/eksport af stash og ydeevneforbedringer for store repoer – med stabile fremskridt mod stærkere kryptografi og moderne lagringsstandarder, leveret af et mangfoldigt fællesskab af både vedligeholdere og nye bidragydere.

Relaterede indlæg: