- Nye cruft-fri multipakkeindekser med
repack.MIDXMustContainCruftreducer 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.
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.
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-fileer mere informativ for undermodulstier i--batch-checktilstand, 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 switchoggit restoreer stabile og ikke længere betragtes som eksperimentelle, hvilket cementerer deres roller som klarere alternativer tilgit checkout.git whatchangeder udfaset og planlagt til fjernelse i Git 3.0; den forbliver tilgængelig bagefter--i-still-use-this.git for-each-reftilføjer paginering via--start-after, forbedrer referenceliste i meget store arkiver.- Sammenlægning giver et mere ryddeligt resumé med
--compact-summaryforumgit mergeoggit 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.
