PĂ€rast kolme kuu arendust on vĂ€lja antud jaotatud allika koodi haldamise sĂŒsteem Git 2.41. Git on ĂŒks populaarsemaid, usaldusvÀÀrsemaid ja kĂ”rge jĂ”udlusega versioonihaldussĂŒsteeme, mis pakub paindlikke vĂ”imalusi mittelineaarseks arenduseks, mis pĂ”hinevad harude jagamisel ja ĂŒhendamisel. Ajaloo terviklikkuse ja tagantjĂ€rele tehtud muudatuste suhtes tugevuse tagamiseks kasutatakse iga commit'i puhul kogu eelneva ajaloo mitteavalikku hash'imist ning on vĂ”imalik ka arendajate digitaalsete allkirjadega kinnitada ĂŒksikute siltide ja commit'ide autentsust.
Uues versioonis on vÔrreldes eelmisega rakendatud 542 muudatust, mille on teinud 95 arendajat, kellest 29 osaleb arenduses esmakordselt. Peamised uuendused:
- Parandatud on ebasaadavate objektide (unreachable), millele hoidlas viiteid ei ole (harud ega sildid), kĂ€sitlemist. Ebasaadavad objektid eemaldatakse prĂŒgikorjajaga, kuid enne eemaldamist jÀÀvad need hoidlas teatud ajaks, et vĂ€ltida vĂ”istluse seisundeid. Ebasaadavate objektide jĂ€lgimiseks on vajalik nende seostamine ajatempleid sisaldavate markeeringutega, mis ei vĂ”imalda neid hoida ĂŒhes pack-failis, kus kĂ”igil objektidel on ĂŒhine muutmise aeg. Varem salvestati iga ebasaadav objekt eraldi failis, mis pĂ”hjustas probleeme, kui oli palju uusi ebasaadavaid objekte, mis ei olnud veel eemaldamist vajavad. Uues versioonis on ebasaadavate objektide pakkimiseks vaikimisi kasutusel mehhanism "cruft packs", mis vĂ”imaldab hoida kĂ”iki ebasaadavaid objekte ĂŒhes pack-failis ja kajastada iga objekti muutmise ajast andmeid eraldi tabelis, mis hoitakse â.mtimesâ laiendiga failis ja on seotud indeksifailiga, mille laiend on â.idxâ.

- Vaikimisi on tagasiindeksi (revindex) kĂ€itamine lubatud pack-failide jaoks. Torvalds'i/linux hoidla testimisel kiirus tagasiindeksi rakendamine 1,49 korda ressursimahukate toimingute nagu "git push" puhul ning lihtsate toimingute, nagu objekti suuruse arvutamine "git cat-file âbatch='%(objectsize:disk)'" puhul 77 korda. Tagasiindeksite (.rev) failid salvestatakse hoidla katalooge " .git/objects/pack".
Tuletame meelde, et Git salvestab kÔik andmed objektidena, mis asuvad eraldi failides. Hoidla töötamise tÔhususe parandamiseks paigutatakse objektid tÀiendavalt pack-failidesse, kus teave esitatakse objekti jÀrjestikuste voogudena (sarnane vorm on kasutusel objektide edastamisel git fetch ja git push kÀskudega). Iga pack-faili jaoks luuakse indeksifail (.idx), mis vÔimaldab objekti id pÔhjal vÀga kiiresti kindlaks teha positsiooni pack-failis, kust see objekt salvestatakse.
Uue vĂ€ljaande kuulutatud tagasiindeks on suunatud objekti id mÀÀramise protsessi optimeerimisele objekti asukoha teabe kaudu pack-failis. Varasemalt viidi selline konverteerimine lĂ€bi reaalajas pack-faili analĂŒĂŒsimisel ja salvestati ainult mĂ€llu, mis ei lubanud selliseid indekseid uuesti kasutada ja sundis indeksit iga kord genereerima. Indeksi koostamise protsess koosneb objekti-positsiooni paaride massiivi koostamisest ja selle positsiooni jĂ€rgi sorteeringust, mis vĂ”ib suurte pack-failide korral vĂ”tta palju aega.
NÀiteks objekti sisu vÀljastamise toiming, milles kasutatakse otsest indeksit, toimus 62 korda kiiremini, kui objektide suuruse nÀitamise toiming, mille jaoks objekti ja positsiooni seose andmeid ei indekseeritud. PÀrast tagasiindeksi kasutamist hakkasid need toimingud vÔtma ligikaudu sama palju aega. Tagasiindeksid vÔimaldavad ka objektide saatmise operatsioone kiirendada fetch ja push kÀskude tÀitmisel, edastades otse kettalt juba valmis andmeid.

- Protokollile «credential helper», mida kasutatakse piiratud juurdepÀÀsuga hoidlatele juurdepÀÀsuÔiguste edastamiseks, on lisatud tugi WWW-Authenticate pÀiste edastamiseks autentimistöötluse ja autentimisteenuse vahel. WWW-Authenticate pÀise tugi vÔimaldab edastada OAuth scope-parameetreid, et paremini jagada kasutaja juurdepÀÀsuÔigusi hoidlatele ja piirata alade jagamist, mis on saadaval pÀringute jaoks.
- For-each-ref kĂ€sule on lisatud vormindamise vĂ”imalus «%(ahead-behind:<base>)», mis vĂ”imaldab korraga saada teavet selle kohta, kui palju commit'e on teatud harul olemas vĂ”i puudub vĂ”rreldes teise haruga (kui palju ĂŒks haru jÀÀb teisele commit'ide tasandil maha vĂ”i edestab seda). Varem sellise teabe saamiseks olid vajalikud kaks eraldi kĂ€sku: «git rev-list âcount main..my-feature» unikaalsete commit'ide arvu saamiseks ja «git rev-list âcount my-feature..main» puuduvate commit'ide arvu saamiseks. NĂŒĂŒd saab sellised arvutused viia ĂŒhe kĂ€suni, mis lihtsustab töötlejate kirjutamist ja vĂ€hendab tĂ€itmise aega. NĂ€iteks mitte ĂŒhendatud harude nĂ€itamiseks ja nende peaharust maha jÀÀmise vĂ”i edestamise hindamiseks vĂ”ib kasutada ĂŒht rida: $ 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 asemel varasemal skriptil, mis töötas 17 korda aeglasemalt: $ 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.
- Git fetch kĂ€sule on lisatud valik «âporcelain», mille mÀÀramisel genereeritakse vĂ€ljund formaadis «<flag> <old-object-id> <new-object-id> <local-reference>», mis on vĂ€hem loetav, kuid paremini skriptides analĂŒĂŒsitav.
- Lisatud seade «fetch.hideRefs», mis vĂ”imaldab kiirendada «git fetch» toimingut, varjates osalist viidatud kohaliku hoidla linkidest serveri tĂ€iseksempleerimise kontrollimise etapis, mis aitab kokku hoida aega, piirates kontrolli ainult serverid, millest andmeid otse kaevandatakse. NĂ€iteks testimisel sĂŒsteemis, millel on suure hulga jĂ€lgitavate vĂ€liste linkide hoidlad, kĂ”ikide linkide vĂ€lja arvatud sihtkohas adresseeritud lingid vĂ€lja jĂ€tmine. serveri $remote, on vĂ”imaldanud vĂ€hendada operatsiooni âgit fetchâ kestust 20 minutist 30 sekundini. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
- Meeskonnas âgit fsckâ on rakendatud kahjustuste, kontrollsummade vastavuse ja vÀÀrtuste Ă”igsuse kontrollimise vĂ”imalus bitikaartides ja vastupidistes indeksites.
- Meeskonnas âgit clone âlocalâ on rakendatud veateate kuvamine, kui proovite kopeerida hoidlast, mis sisaldab sĂŒmboolseid linke $GIT_DIR sees.
Allikas: opennet.ru


