Efter tvÄ mÄnaders utveckling har den distribuerade versionkontrollsystemet Git 2.51 nu slÀppts. Git kÀnnetecknas av hög prestanda och erbjuder verktyg för icke-linjÀr utveckling som baseras pÄ förgrening och sammanslagning av grenar. För att sÀkerstÀlla integriteten i historiken och motstÄndskraft mot retroaktiva Àndringar anvÀnds implicit hashning av hela tidigare historik i varje commit, sÄvÀl som verifiering med digitala signaturer av utvecklare för individuella tags och commits. Git-koden distribueras under GPLv2+-licensen.
JÀmfört med den förra versionen har 506 förÀndringar antagits i den nya versionen, framtagna med deltagande av 91 utvecklare (varav 21 deltog i utvecklingen av Git för första gÄngen). Huvudsakliga nyheter (1, 2, 3):
- Prestandan för kommandona "git push" och "git fetch" har förbÀttrats i repon med ett stort antal referenser. Hastigheten har ökats genom att uppdatera referenser i batch, dÀr flera referenser behandlas i en och samma transaktion, istÀllet för att skapa en separat transaktion för uppdatering av varje referens. Denna optimering har avsevÀrt ökat hastigheten för backend "reftable", som nu övertrÀffar backend "files" i prestanda. Till exempel, i ett testrepo med 10 000 referenser ökade prestandan för "git fetch" med backend "reftable" 22 gÄnger, medan prestandan med backend "files" ökade 1,25 gÄnger. För "git push" var ökningen 18 och 1,21 gÄnger, respektive.
- En ny metod för packning av delar av repot i packfiler, som inte Àr kopplade till att spÄra oÄtkomliga objekt som det inte finns referenser för i repot (dvs. inga grenar eller tags pekar pÄ dem), har föreslagits. Informationen om oÄtkomliga objekt lagras i separata packfiler ("cruft packs"), vilket ledde till behovet av att Äterspegla dem i multipack-index (MIDX) för att omfatta objekt som ursprungligen var oÄtkomliga och endast lagrades i cruft-paketet, men som blev Ätkomliga efter en hÀnvisande commit.
I den nya versionen har repackningen av pack-filer sÀkerstÀllt att ytterligare kopior av nÄbara objekt, som endast lagras i cruft-filer, bevaras. Denna förÀndring garanterar att uppsÀttningen av pack-filer som anvÀnds för att lagra nÄbara objekt inte innehÄller objekt som refererar till andra objekt lagrade utanför denna uppsÀttning. För att utesluta otillgÀngligt innehÄll frÄn flera paketindex (MIDX) av cruft-filer föreslÄs instÀllningen «repack.MIDXMustContainCruft», som avsevÀrt minskar storleken pÄ sÄdana index. Aktiveringen av instÀllningen i GitHub-arkivet har resulterat i en minskning av storleken pÄ MIDX-indexen med 38%, en ökning av hastigheten för skrivning till MIDX-indexen med 35% och en förbÀttrad lÀshastighet pÄ 5%.
- Till kommandot «git pack-objects» har en ny funktion «âpath-walk» lagts till, som inkluderar en ny metod för insamling av information om objekt vid repackning av pack-filer. IstĂ€llet för att gĂ„ igenom objekt i ordning av revisioner, sĂ„ packas objekten med hjĂ€lp av en genomgĂ„ng av filvĂ€gar i lĂ€get «âpath-walk», vilket gör det möjligt att packa alla objekt med samma filvĂ€g pĂ„ en gĂ„ng. Denna metod gör det möjligt att utesluta heuristiken som anvĂ€nder hashning för att bestĂ€mma kopplingen av ett objekt till dess filvĂ€g, samt att slippa sortering av objekt innan packningen. I lĂ€get «âpath-walk» blir storleken pĂ„ de genererade pack-filerna betydligt mindre Ă€n vid gruppering av objekt med hjĂ€lp av hashar.
- Ett format har definierats för att utbyta sparade tillstĂ„nd av arbetskatalogen och index i ett repository, skapade med kommandot «git stash». Det nya formatet gör det möjligt att koda sparade Ă€ndringar (stash-poster) som en sekvens av commits. För import och export föreslĂ„s underkommandona «git stash import» och «git stash export», som kan anvĂ€ndas för att överföra sparade tillstĂ„nd frĂ„n ett system till ett annat och utföra push- eller pull-operationer med dessa tillstĂ„nd som med vanliga grenar eller taggar. 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
- I kommandot «git cat-file», som skriver ut innehĂ„llet i angivna objekt, har funktionerna «âbatch» och «âbatch-check» implementerat möjligheten att visa information om saknade objekt (t.ex. pĂ„ grund av skadade förrĂ„d) och submoduler. Tidigare, nĂ€r sökvĂ€gen indikerade en submodul, rapporterade kommandot «git cat-file âbatch-check» «missing», men nu kommer det att visa objektets identifierare.
- I kommandot «git log» anvĂ€nds optimeringar baserade pĂ„ Bloom-filter för att snabba upp sökningen i Ă€ndringshistoriken nĂ€r filter med flera filvĂ€gar anges, till exempel «git log â path/to/a path/to/b».
- Kommandona «git switch» och «git restore» har stabiliserats, de har betraktats som experimentella sedan 2019. Befallningarna presenteras som moderna alternativ till «git checkout», som separerar sÄdana mindre relaterade funktioner av detta kommando som hantering av grenar (byter och skapar) och ÄterstÀllning av filer i arbetskatalogen.
- Kommandot «git whatchanged», som Ă€r ekvivalent med «git log âraw», har utsetts till förĂ„ldrat och planeras för borttagning i Git-version 3.0.
- I kommandot «git for-each-ref» har alternativet «âstart-after» lagts till, vilket kan anvĂ€ndas tillsammans med alternativet «âcount» för att organisera sidvis utmatning.
- I kommandona «git merge» och «git pull» har alternativet «âcompact-summary» lagts till för att anvĂ€nda ett kompakt format för sammanfattande information om Ă€ndringar istĂ€llet för diffstat-formatet.
- I Git-koden har anvÀndning av nyckelordet «bool», som introducerades i C99-standarden, tillÄtits. Vissa C99-funktioner som experimentellt anvÀnds i Git har ocksÄ dokumenterats (till exempel planeras det att tillÄta anvÀndning av konstruktioner som «(struct foo){ .member = value };» i mitten av 2026). En kompilator med stöd för C99 Àr obligatorisk för Git sedan 2021, men funktionerna i C99-specifikationen införs mycket försiktigt för att bibehÄlla kompatibiliteten med kompilatorer som bara delvis stöder denna standard.
- Reglerna för patchmottagning har Ă€ndrats för att tillĂ„ta att patchar skickas under ett alias, snarare Ă€n endast under utvecklarens riktiga namn. Ăndringen stĂ€mmer överens med patchmottagningsreglerna för Linux-kĂ€rnan.
- Listan över inkompatibla förÀndringar som kommer att tillÀmpas i Git-grenen 3.0 har uppdaterats. Bland de betydande förÀndringarna i den kommande utgÄvan av Git 3.0 mÀrks standardövergÄngen till objektidentifierare baserade pÄ SHA-256 hash-algoritmen vid initiering av nya förrÄd och anvÀndning av "reftable"-formatet för att lagra referenser till grenar och taggar i förrÄdet (den blockbaserade lagringen frÄn JGit-projektet har anvÀnts, optimerad för att lagra ett mycket stort antal referenser).
KĂ€lla: opennet.ru
