PĂ€rast kolme kuu arendustööd on vĂ€lja antud hajutatud allikatekstide haldamise sĂŒsteemi Git 2.41 versioon. Git on ĂŒks populaarsemaid, usaldusvÀÀrseimaid ja kĂ”rge jĂ”udlusega versioonihaldussĂŒsteeme, mis pakub paindlikke mitte-lineaarse arenduse tööriistu, mis pĂ”hinevad harude ja harude ĂŒhinemise sĂŒsteemidel. Ajaloo terviklikkuse ja tagasiulatuvate muudatuste kindlustamiseks kasutatakse kĂ”igi eelnevate ajaloo varjatud rĂ€simise mehhanismi igas commit'is, samuti on vĂ”imalik kinnitada individuaalsetelt arendajatelt digitaalallkirjadega teatud sildid ja commit'id.
VÔrreldes eelmise versiooniga on uude versiooni lisatud 542 muudatust, mille on teinud 95 arendajat, kellest 29 osaleb arenduses esmakordselt. Peamised uuendused:
- Parandatud on puuduvate objektide (unreachable) töötlemist, mis ei ole ladustamises viidatud (ĂŒkski haru vĂ”i silt ei viita nendele). Puuduvad objektid kustutatakse prĂŒgikogujaga, kuid enne kustutamist jÀÀvad nad teatud ajaks ladustamisse, et vĂ€ltida rassi seisundeid. Puuduvate objektide jĂ€lgimise ajavahemiku jaoks on vajalik nende sidumine muudetud objektide ajatempleitega, mis ei luba neid hoida ĂŒhes pack-failis, kus kĂ”ik objektid jagavad sama muutmise aega. Varasemalt salvestati iga puuduv objekt eraldi failina, mis tekitas probleeme, kui oli palju uusi puuduvaid objekte, mis ei olnud veel kustutamiseks sobivad. Uues vĂ€ljaandes kasutusele vĂ”etud mehhanism "cruft packs" pakendab automaatselt puuduvad objektid ĂŒhte pack-faili, vĂ”imaldades hoida kĂ”iki puuduvaid objekte ĂŒhes failis, samal ajal kui iga objekti muutmise andmed kajastuvad eraldi tabelis, mis on salvestatud failis laiendiga ".mtimes" ja seostatakse indeksifailiga, millel on laiend ".idx".

- Vaikeseade on sisse lĂŒlitatud diskikoodide tagasiviimiseks (revindex) pack-failide jaoks. Torvalds / linuxi reposti testimisel vĂ”imaldas tagasiviidetu rakendamine kiirendada ressursi intensiivseid âgit pushâ operatsioone 1,49 korda ning lihtsaid operatsioone, nagu nĂ€iteks objekti suuruse arvutamine âgit cat-file -batch='%(objectsize:disk)'â, 77 korda. Tagasiindeksiga failid (â.revâ) salvestatakse reposse katalooge â.git / objects / packâ.
KÀ herinnerimiseks, Git salvestab kÔik andmed objektide kujul, mis asuvad eraldi failides. Repositooriumi töö efektiivsuse tÔstmiseks paigutatakse objektid tÀiendavalt pack-failidesse, kus teave esitatakse objektide jadas vooguna (sarnast formaati kasutatakse objektide edastamiseks git fetch ja git push kÀskudega). Iga pack-faili jaoks luuakse indeksifail (.idx), mis vÔimaldab objekti tuvastamiseks vÀga kiiresti teada saada offset'i pack-failis, kus see objekt on salvestatud.
Uues vÀljaandes sisalduv pöördindeks on suunatud objekti identifikaatori mÀÀramise protsessi optimeerimisele objekti asukohateabe pÔhjal pack-failis. Varem viidi see teisendus lÀbi reaalajas pack-faili parsimise ajal ja salvestati ainult mÀllu, mis ei vÔimaldanud selliseid indekseid uuesti kasutada ja sundis indeksi iga kord genereerima. Indeksi ehitamine koosneb objekti- ja positsioonipaaride massiivi loomisest ning selle sorteerimisest positsiooni jÀrgi, mis vÔib suures pack-failis aega vÔtta.
NÀiteks objekti sisu vÀljundoperatsioon, kus kasutatakse otseindeksit, toimus 62 korda kiiremini kui objekti suuruse nÀitamise operatsioon, mille puhul positsiooni ja objekti vaheline side ei olnud indekseeritud. PÀrast pöördindeksi kasutamist hakkasid nimetatud operatsioonid vÔtma umbes sama palju aega. Pöördindeksid vÔimaldavad ka objektide edastamise operatsioonide kiirus suureneda fetch ja push kÀskude tÀitmisel, vÔimaldades otse edastada juba valmis andmeid kettalt.

- Protokolli «credential helper», mida kasutatakse piiratud juurdepÀÀsuga hoidlatele juurdepÀÀsu andmete edastamiseks, on lisatud tugi WWW-Authenticate pÀiste edastamiseks autentimise teenuse ja andmete töötlemise vahel. WWW-Authenticate pÀise tugi vÔimaldab edastada OAuth pÀringute puhul scope-parameetreid, et kasutaja juurdepÀÀsu hoidlatele saaks tÀpsemalt piirata ning eristada erinevaid alasid, mis on pÀringuteks saadaval.
- for-each-ref meeskonda on lisatud vormindamise valik â%(ahead-behind:)â, mis vĂ”imaldab korraga saada teavet kindlate commit'ide arvu kohta, mis on antud harus vĂ”i puuduvad vĂ”rreldes teise haruga (kui palju ĂŒks haru mahajÀÀb vĂ”i juhib teist commit'ide tasemel). Varem taoliseks teabeks saamiseks tuli teha 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 on sellised arvutused vĂ”imalikud ĂŒhe kĂ€suga, mis lihtsustab kĂ€sitlejate kirjutamist ja lĂŒhendab tĂ€itmise aega. NĂ€iteks mitteĂŒhinemis harude kuvamiseks ja nende pĂ”hiharu mahajÀÀmiste vĂ”i juhtimiste hindamiseks saab kasutada ĂŒhe rea kĂ€su: $ 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 selle asemel, et kasutada varem rakendatud skripti, mis töötab 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
- KĂ€skule «git fetch» on lisatud valik «âporcelain», mille puhul vormistatakse vĂ€ljund formaadis « », mis on vĂ€hem loetav, kuid paremini kasutatav skriptides.
- Lisatud on seadistus «fetch.hideRefs», mis vĂ”imaldab kiirendada «git fetch» toimingute tĂ”husust, varjates osa viiteid kohalikus hoidlas serveri poolt objekti tĂ€ieliku kogumi saatmise kontrolli etapis, mis sÀÀstab aega, piirdudes ainult serverite, millelt andmed otse eraldatakse. NĂ€iteks, testides sĂŒsteemis, kus on suur hulk jĂ€lgitavaid vĂ€liseid viiteid, vĂ”imaldas kĂ”ikide viidete, vĂ€lja arvatud sihitud $remote, eemaldamine vĂ€hendada «git fetch» toimingu kestust 20 minutist 30 sekundini. serverile $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
- KÀsk «git fsck» on saanud uue vÔimaluse kontrollida kahjustusi, kontrollsummade vastavust ning vÀÀrtuste Ôigsust bitikaartide ja vastupidiste indeksite puhul.
- KĂ€sule «git clone --local» on lisatud vigade vĂ€ljund, kui ĂŒritatakse kopeerida hoidlast, mis sisaldab sĂŒmboolseid linke $GIT_DIR sees.
Allikas: opennet.ru


