Pas dy muajsh zhvillimi, është publikuar lëshimi i sistemit të distribuara për menaxhimin e teksteve burimore Git 2.51. Git karakterizohet nga performanca e lartë dhe ofron mjete për zhvillimin jo linear, të bazuara në degëzimin dhe bashkimin e degëve. Për të siguruar integritetin e historisë dhe qëndrueshmërinë ndaj ndryshimeve "me prapaveprime", përdoren hash të implicit të gjithë historisë së mëparshme në çdo commit, si dhe autentifikimi me nënshkrime digjitale të zhvilluesve për etiketat dhe commits specifike. Kodi i Git shpërndahet nën licencën GPLv2+.
Në krahasim me lëshimin e kaluar, në versionin e ri janë pranuar 506 ndryshime, të përgatitura me pjesëmarrjen e 91 zhvilluesve (21 prej të cilëve janë pjesëmarrës për herë të parë në zhvillimin e Git). Novitetet kryesore (1, 2, 3):
- Performanca e komandave "git push" dhe "git fetch" është rritur në repository me numra të mëdhenj referencash. Shpejtësia është siguruar falë përditësimit të referencave në mënyrë paketore, ku në një transaksion përpunohen disa referenca, përveç krijimit të një transaksioni të veçantë për përditësimin e çdo reference. Optimizimi ka rritur ndjeshëm shpejtësinë e backend-it "reftable", i cili tani mbizotëron mbi performancën e backend-it "files". Për shembull, në një repository testues me 10 mijë referenca, performanca e "git fetch" duke përdorur backend-in "reftable" është rritur 22 herë, ndërsa duke përdorur backend-in "files" është rritur 1.25 herë. Rritja për "git push" ishte 18 dhe 1.21 herë, përkatësisht.
- Një metodë e re është propozuar për paketimin në skedarët pack të pjesëve të repository-t që nuk janë të lidhura me ndjekjen e objekteve të papërftuara, për të cilat në repository nuk ka referenca (as degë as etiketat). Informacioni mbi objektet e papërftuara ruhet në skedarët e veçantë pack ("cruft packs"), gjë që ka sjellë nevojën për pasqyrimin e tyre në indekset e shumë-paketave MIDX (multi-pack index) për të përfshirë objektet që fillimisht ishin të papërftuara dhe ruheshin vetëm në pack-cruft, por që më pas u bënë të përftuara pas një commit që u referohej atyre.
Në versionin e ri, gjatë ri-pakimit të skedarëve pack, është siguruar ruajtja e kopjeve shtesë të objekteve të përftuara, të ruajtura vetëm në skedarë cruft. Një ndryshim i tillë garanton që në grupin e skedarëve pack, që përdoren për ruajtjen e objekteve të përftuara, nuk përfshihen objekte që lidhen me objekte të tjera, të ruajtura jashtë këtij grupi. Për përjashtimin nga indeksat e shumë-paketave (MIDX) të përmbajtjes së papërftuar të skedarëve cruft, është propozuar cilësimi "repack.MIDXMustContainCruft", i cili lejon një reduktim të dukshëm të madhësisë së këtyre indekseve. Aktivizimi i cilësimit në repository-t GitHub ka lejuar një reduktim të madhësisë së indekseve MIDX me 38%, një përshpejtim të shkrimit në indekset MIDX me 35% dhe një rritje të performancës së leximit me 5%.
- NĂ« komandĂ«n "git pack-objects" Ă«shtĂ« shtuar opsioni "âpath-walk", i cili pĂ«rfshin njĂ« metodĂ« tĂ« re pĂ«r grumbullimin e informacionit mbi objektet gjatĂ« ri-pakimit tĂ« skedarĂ«ve pack. NĂ« vend qĂ« tĂ« kalojĂ« objektet nĂ« rendin e revisioneve, duke pĂ«rdorur modin "âpath-walk", objektet kalohen pĂ«rmes kalimit tĂ« rrugĂ«ve tĂ« skedarĂ«ve, çka lejon paketimin e gjithĂ«ve objekteve me tĂ« njĂ«jtĂ«n rrugĂ« skedari nĂ« njĂ« hap. Ky qasje ofron mundĂ«sinĂ« pĂ«r tĂ« pĂ«rjashtuar heuristikĂ«n qĂ« pĂ«rdor hashing pĂ«r tĂ« pĂ«rcaktuar lidhjen e objektit me rrugĂ«n e tij tĂ« skedarit dhe gjithashtu pĂ«r tĂ« eliminuar nevojĂ«n pĂ«r renditjen e objekteve para paketimit. Duke pĂ«rdorur modin "âpath-walk", madhĂ«sia e skedarĂ«ve pack tĂ« gjeneruar Ă«shtĂ« dukshĂ«m mĂ« e vogĂ«l se ajo gjatĂ« grumbullimit tĂ« objekteve pĂ«rmes hashing.
- Format e ri Ă«shtĂ« pĂ«rcaktuar pĂ«r shkĂ«mbimin e shteteve tĂ« ruajtura tĂ« punĂ«s dhe indekseve nĂ« repository, tĂ« krijuara duke pĂ«rdorur komandĂ«n "git stash". Formati i ri lejon kodimin e ndryshimeve tĂ« ruajtura (stash-e) si njĂ« sekuencĂ« komitĂ«ve. PĂ«r importimin dhe eksportimin janĂ« propozua nĂ«nkomandat "git stash import" dhe "git stash export", tĂ« cilat mund tĂ« pĂ«rdoren pĂ«r tĂ« transferuar shtetet e ruajtura nga njĂ« sistem nĂ« njĂ« tjetĂ«r dhe pĂ«r tĂ« kryer operacione push ose pull me kĂ«to shtete si me degĂ« tĂ« zakonshme ose etiketa. 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
- NĂ« komandĂ«n "git cat-file", e cila shfaq pĂ«rmbajtjen e objekteve tĂ« caktuara, me pĂ«rdorimin e opsioneve "âbatch" dhe "âbatch-check" Ă«shtĂ« realizuar mundĂ«sia e shfaqjes sĂ« informacionit pĂ«r objektet e munguar (p.sh., pĂ«r shkak tĂ« dĂ«mtimeve nĂ« repository) dhe submodulet. MĂ« parĂ«, kur specifikohej rruga e njĂ« submoduli, komanda "git cat-file âbatch-check" jepte "missing", ndĂ«rsa tani do tĂ« tregojĂ« identifikimin e objektit.
- NĂ« komandĂ«n "git log" janĂ« angazhuar optimizime tĂ« bazuara nĂ« filtrat e Bloom pĂ«r tĂ« pĂ«rshpejtuar kĂ«rkimin nĂ« historinĂ« e ndryshimeve kur specifikohen filtra me disa rrugĂ« skedari, pĂ«r shembull, "git log â path/to/a path/to/b".
- Komandat «git switch» dhe «git restore» janë stabilizuar, të cilat që nga viti 2019 janë konsideruar eksperimentale. Komandat paraqiten si ekuivalentë modernë të «git checkout», duke ndarë mundësi të tilla të pak lidhura të kësaj komande si manipulimi i degëve (kalimi dhe krijimi) dhe rikuperimi i skedarëve në katalogun e punës.
- Komanda «git whatchanged», ekuivalente me «git log âraw», Ă«shtĂ« shpallur e vjetruar dhe Ă«shtĂ« planifikuar pĂ«r t'u hequr nĂ« degĂ«n Git 3.0.
- NjĂ« opsion «âstart-after» Ă«shtĂ« shtuar nĂ« komandĂ«n «git for-each-ref», i cili mund tĂ« pĂ«rdoret sĂ« bashku me opsionin «âcount» pĂ«r organizimin e daljeve nĂ« faqe.
- NjĂ« opsion «âcompact-summary» Ă«shtĂ« shtuar nĂ« komandat «git merge» dhe «git pull» pĂ«r tĂ« pĂ«rdorur njĂ« format tĂ« kompakt tĂ« informacionit pĂ«rmbledhĂ«s pĂ«r ndryshimet nĂ« vend tĂ« formatit diffstat.
- Në bazën e kodit Git është lejuar përdorimi i fjalës kyçe «bool», e cila është shfaqur në standardin C99. Gjithashtu janë dokumentuar disa mundësi të C99, të përdorura eksperimentalisht në Git (për shembull, në mesin e vitit 2026 planifikohet të lejohet përdorimi i strukturave «(struct foo){ .member = value };»). Një kompilar me mbështetje për C99 është i detyrueshëm për Git që nga viti 2021, por mundësitë e specifikimit C99 po zbatohet mjaft me kujdes për të ruajtur kompatibilitetin me kompilarët që vetëm pjesërisht mbështesin këtë standard.
- Rregullat për pranimin e patch-eve janë ndryshuar për të lejuar dërgimin e patch-eve nën një pseudonim, jo vetëm nën emrin e vërtetë të zhvilluesit. Ky ndryshim përputhet me rregullat për pranimin e patch-eve në bërthamën Linux.
- Lista e ndryshimeve që nuk janë të përshtatshme për kompatibilitet është përditësuar dhe do të zbatohen në degën Git 3.0. Ndryshimi më i rëndësishëm në lëshimin e ardhshëm Git 3.0 është kalimi me default në identifikuesit e objekteve të bazuara në algoritmin e hashing SHA-256 gjatë inicializimit të depozitave të reja dhe aktivizimi i formatit «reftable» për ruajtjen e referencave në dega dhe etiketa në depo (i aktivizuar nga ruajtja bllok prej projektit JGit, e optimizuar për të ruajtur një numër shumë të madh referencash).
Burimi: opennet.ru
