Pas tre muajsh zhvillimi, është publikuar versioni i sistemit të shpërndarë të menaxhimit të kodit burimor Git 2.41. Git është një nga sistemet më të njohura, të besueshme dhe me performancë të lartë për menaxhimin e versioneve, duke ofruar mjete fleksibile për zhvillim jo-linear, të bazuara në degët dhe bashkimet. Për të garantuar integritetin e historisë dhe qëndrueshmërinë ndaj ndryshimeve 'retroaktive', përdoret një hash-im implicit i të gjithë historisë së mëparshme në çdo commit, dhe gjithashtu është e mundur të konfirmohet me nënshkrime digjitale të zhvilluesve për etiketat dhe commit-et e veçanta.
Në krahasim me versionin e kaluar, në versionin e ri janë pranuar 542 ndryshime, të përgatitura nga 95 zhvillues, nga të cilët 29 kanë marrë pjesë për herë të parë në zhvillim. Risitë kryesore janë:
- Përmirësimi i trajtimit të objekteve të papërballueshme (unreachable), për të cilat në depo nuk ka referenca (nuk ka degë ose etiketa që i referohen). Objektet e papërballueshme fshihen nga mbledhësit e plehrave, por përpara se të fshihen, ato qëndrojnë për një kohë të caktuar në depo për të shmangur gjendjet garuese. Për të ndjekur periudhën e qëndrimit të objekteve të papërballueshme, është e nevojshme të lidhen etiketat me kohën e ndryshimeve të këtyre objekteve, gjë që nuk lejon ruajtjen e tyre në një skedë pack, në të cilën të gjitha objektet kanë një kohë të përgjithshme të ndryshimit. Më parë, çdo objekt i papërballueshëm ruhej në një skedë të veçantë, gjë që shkaktonte probleme kur kishte një numër të madh objektesh të papërballueshme të reja që ende nuk përfshiheshin në fshirje. Në versionin e ri, për paketimin e objekteve të papërballueshme, mekanizmi 'cruft packs' është aktivizuar si parazgjedhje, duke lejuar ruajtjen e të gjitha objekteve të papërballueshme në një skedë pack, ndërsa të dhënat mbi kohën e modifikimit të secilit objekt pasqyrohen në një tabelë të veçantë, e ruajtur në një skedë me përfundim '.mtimes' dhe e lidhur me ndihmën e një skedari indeksi me përfundim '.idx'.

- Pranimi si default qĂ« ndihma e indeksit tĂ« rikthimit (revindex) pĂ«r skedarĂ«t pack Ă«shtĂ« aktive. GjatĂ« testimeve nĂ« repositorin torvalds/linux, pĂ«rdorimi i indeksit tĂ« rikthimit lejoj qĂ« operacionet e kĂ«rkuar `git push` tĂ« shpejtohen 1.49 herĂ«, ndĂ«rsa operacionet e thjeshta, si llogaritja e madhĂ«sisĂ« sĂ« njĂ« objekti me ndihmĂ«n e âgit cat-file âbatch=â%(objectsize:disk)'â u pĂ«rshpejtuan 77 herĂ«. SkedarĂ«t (â.revâ) me indeksin e rikthimit do tĂ« ruhet brenda repositorit nĂ« dosjen â.git/objects/packâ.
E rikujtojmë se Git ruan të dhënat e gjitha në formë objektesh, të cilat vendosen në skedare të veçanta. Për të rritur efikasitetin e punës me repositorin, objektet gjithashtu vendosen në skedarë pack, në të cilat informacioni paraqitet si një rrjedhë e objekteve që pasojnë njëra-tjetrën (formati i ngjashëm përdoret gjatë dërgimit të objekteve nga komandat git fetch dhe git push). Për çdo skedar pack krijohet një skedar indeksi (.idx), që lejon që shumë shpejt të përcaktohet pozita në skedarin pack, ku ruhet ky objekt, sipas identifikuesit të tij.
Indeksi i rikthimit tĂ« pĂ«rfshirĂ« nĂ« versionin e ri Ă«shtĂ« orientuar nĂ« optimizimin e procesit tĂ« pĂ«rcaktimit tĂ« identifikuesit tĂ« objektit sipas informacionit pĂ«r vendosjen e objektit nĂ« skedarin pack. MĂ« parĂ«, ky transformim bĂ«hej nĂ« fluks gjatĂ« analizĂ«s sĂ« skedarit pack dhe ruheshin vetĂ«m nĂ« memorie, çka nuk lejonte qĂ« tĂ« pĂ«rdornin pĂ«rsĂ«ri indekse tĂ« tilla dhe detyronte se çdo herĂ« tĂ« gjeneronin indeksin. Operacioni i ndĂ«rtimit tĂ« indeksit konsiston nĂ« ndĂ«rtimin e njĂ« vargu nga çiftet âobjekt-pozitĂ«â dhe renditjen e tij sipas pozitĂ«s, qĂ« mund tĂ« marrĂ« shumĂ« kohĂ« pĂ«r skedarĂ«t pack tĂ« mĂ«dhenj.
Për shembull, operacioni i shfaqjes së përmbajtjes së objekteve, në të cilin përdoret indeksi i drejtpërdrejtë, u përshpejtua 62 herë më shpejt se operacioni i shfaqjes së madhësisë së objekteve, për të cilin të dhënat mbi lidhjen e pozitës me objektin nuk ishin indekse. Pas përdorimit të indeksit të rikthimit, operacionet e përmendura filluan të kishin një kohë afërsisht të njëjtë. Indeksat e rikthimit gjithashtu lejojnë të shpejtojnë operacionet e dërgimit të objekteve gjatë ekzekutimit të komandave fetch dhe push përmes dërgimit të drejtpërdrejtë të të dhënave tashmë të gatshme nga disku.

- Në protokollin «credential helper», i përdorur për të transmetuar kredencialet kur lidhemi me depo që kanë qasje të kufizuar, është shtuar mbështetje për transmetimin e titujve WWW-Authenticate midis menaxherit të kredencialeve dhe shërbimit, ku bëhet autentifikimi. Mbështetjeja për titullin WWW-Authenticate lejon dërgimin e parametrave scope të OAuth për një ndarje më granulare të aksesit të përdoruesit në depo dhe ndarjen e zonave të aksesit për kërkesat.
- EkspeditĂ«s sĂ« for-each-ref i Ă«shtĂ« shtuar opsioni i formatimit «%(ahead-behind:<base>)», i cili lejon tĂ« merrni njĂ«herĂ«sh informacion mbi numrin e komiteteve qĂ« janĂ« tĂ« pranishme ose qĂ« mungojnĂ« nĂ« njĂ« degĂ« tĂ« caktuar, nĂ« lidhje me njĂ« degĂ« tjetĂ«r (sa shumĂ« njĂ« degĂ« Ă«shtĂ« prapa ose pĂ«rpara njĂ« tjetĂ«r nĂ« nivelin e komiteteve). MĂ« parĂ«, pĂ«r tĂ« marrĂ« njĂ« informacion tĂ« tillĂ« kĂ«rkohej tĂ« ekzekutohej dy komanda tĂ« ndara: «git rev-list âcount main..my-feature» pĂ«r tĂ« marrĂ« numrin e komiteteve unike pĂ«r degĂ«n dhe «git rev-list âcount my-feature..main» pĂ«r tĂ« marrĂ« numrin e komiteteve qĂ« mungojnĂ«. Tani kĂ«to llogaritje mund tĂ« reduktohen nĂ« njĂ« komandĂ«, qĂ« e thjeshtojnĂ« shkruan e menaxherĂ«ve dhe zvogĂ«lojnĂ« kohĂ«n e ekzekutimit. PĂ«r shembull, pĂ«r tĂ« shfaqur degĂ«t qĂ« nuk kanĂ« kaluar bashkimin dhe pĂ«r tĂ« vlerĂ«suar prapambetje ose pĂ«rparĂ«si pĂ«r degĂ«n kryesore, mund tĂ« pĂ«rdorni njĂ« komandĂ« tĂ« shkurtĂ«r: $ git for-each-ref âno-merged=origin/HEAD \ âformat='%(refname:short) %(ahead-behind:origin/HEAD)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-refâexclude 16 96 tb/roaring-bitmaps 47 3 nĂ« vend tĂ« skenarit tĂ« mĂ«parshĂ«m, i cili ekzekutohej 17 herĂ« mĂ« ngadalĂ«: $ git for-each-ref âformat='%(refname:short)' âno-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list âcount origin/HEAD..$ref)" behind="$(git rev-list âcount $ref..origin/HEAD)" printf "%s %d %d\n" "${ref}" "${ahead}" "${behind}" done | column -t tb/cruft-extra-tips 2 96 tb/for-each-refâexclude 16 96 tb/roaring-bitmaps 47 3
- EkspeditĂ«s «git fetch» i Ă«shtĂ« shtuar opsioni «âporcelain», me tĂ« cilin formohet njĂ« dalje nĂ« formatin «<flag> <old-object-id> <new-object-id> <local-reference>», mĂ« pak i lexueshĂ«m, por mĂ« i pĂ«rshtatshĂ«m pĂ«r pĂ«rpunim nĂ« skenarĂ«.
- Në sistem është shtuar cilësimi «fetch.hideRefs», i cili lejon të përshpejtohen operacionet «git fetch» duke fshehur një pjesë të referencave në depo lokale gjatë fazës së kontrollit për dërgimin e setit të plotë të objekteve nga serveri, gjë që i lejon të kursejnë kohë duke kufizuar kontrollin vetëm. serverësh, nga të cilat nxirren të dhëna drejtpërdrejt. Për shembull, gjatë testimit në një sistem me depo që përmbajnë një numër të madh lidhjesh të jashtme të ndjekura, përjashtimi i të gjitha lidhjeve përveç atyre të adresuara qëllimit serverit $remote, lehtësoi ekzekutimin e operacionit «git fetch» nga 20 minuta në 30 sekonda. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
- Në komandën «git fsck» është implementuar mundësia e kontrollit të dëmtimeve, përputhjes së shumave kontrolluese dhe saktësisë së vlerave në hartat bitore të mundësisë dhe indekset e kundërta.
- NĂ« komandĂ«n «git clone âlocal» Ă«shtĂ« implementuar shfaqja e njĂ« gabimi kur pĂ«rpiqet tĂ« kopjohet nga njĂ« depo qĂ« pĂ«rmban lidhje simbolike brenda $GIT_DIR.
Burimi: opennet.ru


