Release av det distribuerade versionshanteringssystemet Git 2.56 har presenterats. Koden för Git distribueras under GPLv2+-licensen. JÀmfört med den tidigare utgÄvan har den nya versionen tagit emot 748 Àndringar, förberedda med deltagande av 104 utvecklare, varav 39 deltog i utvecklingen av Git för första gÄngen. Huvudnyheterna (1, 2, 3):
- LĂ€gg till "git add âresolved"-lĂ€get för att lösa konflikter vid sammanslagning av grenar, vilket kontrollerar filer för konfliktsymboler och vid upptĂ€ckten av en symbol i minst en fil ger ett felmeddelande, indexerar inga filer och visar en lista över filer som krĂ€ver Ă„tgĂ€rd. Till skillnad frĂ„n kommandot "git add âupdate" behandlar det nya lĂ€get endast filer som Ă€r i konflikt, medan Ă€ndrade filer som inte Ă€r relaterade till konflikten ignoreras, vilket gör det möjligt att sĂ€kert avsluta sammanslagningen av grenar Ă€ven om det finns andra oavslutade Ă€ndringar i arbetskatalogen (kommandot "git add âupdate" lade till alla tidigare spĂ„rade Ă€ndrade filer i arbetskatalogen till indexet).
- Arbetet med stora förrĂ„d har avsevĂ€rt snabbats upp genom optimering av algoritmen för att söka de senaste gemensamma committernas vid sammanslagning av grenar och vid jĂ€mförelse av commits. Under arbetets gĂ„ng beaktas nu committers som tillhör enbart en av grenarna, vilket möjliggör att avbryta skanning sĂ„ snart alla möjliga gemensamma föregĂ„ngare har upptĂ€ckts, utan att slösa tid pĂ„ ytterligare genomgĂ„ng av Ă€ndringshistoriken. I ett av de testade förrĂ„den ökade sökhastigheten i genomsnitt 20 gĂ„nger, medan i ett annat förrĂ„d nĂ„dde hastighetens ökning 70 gĂ„nger. Vid körning av kommandot "git merge-base âall v4.8 v4.9" i ett förrĂ„d med Linux-kĂ€rnan minskade antalet genomsökningssteg frĂ„n 167 tusen till 3.8 tusen.
- För serveranvĂ€ndning har lĂ€get för ompackning "âpath-walk" anpassats, vilket möjliggör skapandet av mer kompakta pack-filer genom att gruppera objekt baserat pĂ„ deras sökvĂ€g i mapptrĂ€det (till exempel har anvĂ€ndningen av "âpath-walk" för Fluent UI minskat storleken pĂ„ pack-filen frĂ„n 558 MB till 164 MB). I den nya versionen har möjligheten att anvĂ€nda lĂ€get "âpath-walk" tillsammans med nĂ„barhetsbitmap (reachability bitmap) och deltaöar (delta island), som anvĂ€nds av git-hosting för att pĂ„skynda arbetet och isolera forkar frĂ„n den huvudsakliga repot, implementerats.
- Flaskhalsar som ledde till överflödiga berÀkningar i stora repon har tagits bort: onödiga filstatuskontroller vid skrivning till reftable har eliminerats; dubbelgenomsökning av listan vid varje insÀttning av en ny pack-fil har uteslutits; operationerna med reftable, dÀr mÄnga borttagningsposter har samlats, har pÄskyndats; arbetet med "git diff" har optimerats nÀr filvÀgar anges som begrÀnsningar. Efter dessa optimeringar har arbetet med reftable vid ett stort antal borttagningar pÄskyndats med 65 gÄnger (frÄn 13 sekunder till 0,2 sekunder), och körning av det problematiska kommandot "git diff" i Chromium-repot med 500000 element i indexet tar nu 0,07 sekunder istÀllet för 8 minuter.
- Den experimentella kommandon "git history", som ger möjligheter att skriva om Àndringshistorik, har lagt till operationen "git history drop" för att ta bort en vald commit med automatisk koppling av dess efterkommande till förÀldrakommitten.
- Kommandot "git branch âdelete-merged âorigin/*â âtopic-*'" har lagts till för sĂ€ker borttagning av grupper av lokala grenar vars Ă€ndringar redan har överförts till det externa repot. Masker fĂ„r anvĂ€ndas för att filtrera grenar och repon. För att analysera kandidater för borttagning utan att faktiskt utföra operationen kan flaggan "âdry-run" anvĂ€ndas.
- Kommandot "git refs create|update|delete|rename" har lagts till dÀr lÄgnivÄoperationer för att skapa, ta bort, omdöpa och uppdatera referenser har sammanfogats.
- Till kommandot "git bisect run" har en option "âreset-when-found=[]" lagts till, som automatiskt Ă„terstĂ€ller repot till tillstĂ„ndet före sökningen eller lĂ€mnar den problematiska commit aktiv, utan att behöva köra kommandot "git bisect reset" separat.
- Flaggan "âlinearize" har lagts till i kommandot "git replay" för att anvĂ€nda en platt sammanslagningsstruktur, liknande "git rebase âno-rebase-merges", men utan att referera till arbetskatalogen.
- I kommandot "git log âfollow" implementerades spĂ„rning av filnamn som Ă€ndrats i en icke-linjĂ€r Ă€ndringshistorik, till exempel vid sammanslagning av undergrenar. FilvĂ€gen lagras nu separat för varje förĂ€lder commit, vilket gör resultatet oberoende av ordningen för att fĂ„ Ă„tkomst till commit-historien.
- Möjligheten att anvĂ€nda kommandot "git repack -a âfilter=blob:limit=1m âdrop-filtered" har lagts till för att ta bort stora blob-objekt, som laddats on demand frĂ„n ett extern arkiv och som inte anvĂ€nds i den aktuella indexen. Vid senare Ă„tkomst till dessa objekt kommer de automatiskt att laddas om.
- I kommandot "git log âgraph" har indragningar implementerats för grafer med flera oberoende rotpunkter för att visuellt separera orelaterade commits.
- Typiska skrivfel, som att ange "git push origin/main" istĂ€llet för "git push origin main" eller "git branch âset-upstream-to origin main" istĂ€llet för "git branch âset-upstream-to=origin/main", har identifierats och meddelanden ges om korrekt anvĂ€ndning.
KĂ€lla: opennet.ru
