PÄc trÄ«s mÄneÅ”u izstrÄdes ir publicÄta izplatÄ«tÄ avotu kontroles sistÄmas Git 2.41 izlaidums. Git ir viena no populÄrÄkajÄm, uzticamÄkajÄm un augstas veiktspÄjas versiju kontroles sistÄmÄm, kas nodroÅ”ina elastÄ«gus nelineÄrus izstrÄdes rÄ«kus, kuru pamatÄ ir zaru sazaroÅ”ana un apvienoÅ”ana. Lai nodroÅ”inÄtu vÄstures integritÄti un izturÄ«bu pret retroaktÄ«vÄm izmaiÅÄm, tiek izmantota netieÅ”a visas iepriekÅ”ÄjÄs vÄstures jaukÅ”ana katrÄ saistÄ«bÄ, kÄ arÄ« ir iespÄjams pÄrbaudÄ«t atseviŔķus tagus un saistÄ«bas ar izstrÄdÄtÄju digitÄlajiem parakstiem.
SalÄ«dzinot ar iepriekÅ”Äjo laidienu, jaunajÄ versijÄ, kas sagatavota ar 542 izstrÄdÄtÄju piedalÄ«Å”anos, tika pieÅemtas 95 izmaiÅas, no kurÄm 29 izstrÄdÄ piedalÄ«jÄs pirmo reizi. Galvenie jauninÄjumi:
- Uzlabota apstrÄde ar nesasniedzamiem objektiem, uz kuriem nav atsauces repozitorijÄ (atsauces uz atzariem vai tagiem nav). Neaizsniedzamus priekÅ”metus atkritumu savÄcÄjs izÅem, bet pirms izÅemÅ”anas noteiktu laiku paliek krÄtuvÄ, lai izvairÄ«tos no sacensÄ«bu apstÄkļiem. Lai sekotu lÄ«dzi nesasniedzamo objektu periodam, tiem ir jÄpiesaista etiÄ·etes ar lÄ«dzÄ«gu objektu maiÅas laiku, kas neļauj tos uzglabÄt vienÄ pakotnÄ, kurÄ visiem objektiem ir kopÄ«gs maiÅas laiks. IepriekÅ” katrs nesasniedzamais objekts tika glabÄts atseviÅ”Ä·Ä failÄ, kas radÄ«ja problÄmas, ja bija liels skaits jaunu nesasniedzamu objektu, kas vÄl nebija pakļauti dzÄÅ”anai. JaunajÄ laidienÄ pÄc noklusÄjuma nesasniedzamu objektu iepakoÅ”anai tiek izmantots ācruft packsā mehÄnisms, kas ļauj glabÄt visus nesasniedzamos objektus vienÄ pakotnes failÄ un atspoguļot datus par katra objekta modifikÄcijas laiku atseviÅ”Ä·Ä tabulÄ, kas glabÄjas failu ar paplaÅ”inÄjumu ā.mtimesā un izveidot saiti, izmantojot indeksa failu ar paplaÅ”inÄjumu ā.idxā.
- PÄc noklusÄjuma pakotnes failiem diskÄ ir iespÄjota apgrieztÄ indeksa (revindex) uzturÄÅ”ana. PÄrbaudot torvalds/linux krÄtuvÄs, apgrieztÄ indeksa izmantoÅ”ana ļÄva mums 1.49 reizes paÄtrinÄt resursietilpÄ«gÄs "git push" darbÄ«bas un vienkÄrÅ”as darbÄ«bas, piemÄram, viena objekta lieluma aprÄÄ·inÄÅ”anu, izmantojot "git cat- fails --batch='%(objectsize:disk)' Ā» 77 reizes. Faili (.rev) ar apgriezto indeksu tiks glabÄti repozitorijÄ direktorijÄ ".git/objects/pack".
AtgÄdiniet, ka Git visus datus glabÄ objektu veidÄ, kas tiek ievietoti atseviŔķos failos. Lai palielinÄtu darba ar repozitoriju efektivitÄti, objekti papildus tiek ievietoti pakotnes failos, kuros informÄcija tiek parÄdÄ«ta objektu straumes veidÄ, kas seko viens pÄc otra (lÄ«dzÄ«gs formÄts tiek izmantots, pÄrsÅ«tot objektus ar git fetch un git push komandas). Katram pakotnes failam tiek izveidots indeksa fails (.idx), kas ļauj ļoti Ätri noteikt nobÄ«di pakotnes failÄ, pÄc kuras objekta identifikators glabÄ doto objektu.
JaunajÄ laidienÄ iekļautÄ apgrieztÄ indeksa mÄrÄ·is ir racionalizÄt objekta ID noteikÅ”anas procesu, izmantojot informÄciju par objekta atraÅ”anÄs vietu pakotnes failÄ. IepriekÅ” Å”Äda konvertÄÅ”ana tika veikta lidojuma laikÄ pakotnes faila parsÄÅ”anas laikÄ un tika saglabÄta tikai atmiÅÄ, kas neļÄva atkÄrtoti izmantot Å”Ädus indeksus un lika indeksu Ä£enerÄt katru reizi. Indeksa izveides darbÄ«ba tiek samazinÄta lÄ«dz objektu un pozÄ«ciju pÄru masÄ«va izveidoÅ”anai un kÄrtoÅ”anai pÄc pozÄ«cijas, kas var aizÅemt ilgu laiku lieliem pakotÅu failiem.
PiemÄram, objektu satura attÄloÅ”anas darbÄ«ba, kurÄ tiek izmantots tieÅ”ais indekss, bija 62 reizes ÄtrÄka nekÄ objektu lieluma parÄdÄ«Å”anas darbÄ«ba, kuriem netika indeksÄti pozÄ«cijas-objektu attiecÄ«bu dati. PÄc apgrieztÄ indeksa izmantoÅ”anas Ŕīs darbÄ«bas sÄka aizÅemt aptuveni tikpat ilgu laiku. Reversie indeksi arÄ« ļauj paÄtrinÄt objektu nosÅ«tÄ«Å”anas darbÄ«bu, izpildot fetch un push komandas, tieÅ”i pÄrsÅ«tot gatavus datus no diska.
- Pievienots atbalsts WWW-Authenticate galveÅu nodoÅ”anai starp akreditÄcijas datu apstrÄdÄtÄju un autentifikÄcijas pakalpojumu protokolam "akreditÄcijas datu palÄ«gs", ko izmanto akreditÄcijas datu nodoÅ”anai, piekļūstot ierobežotÄm krÄtuvÄm. WWW-Authenticate galvenes atbalsts ļauj nodot OAuth tvÄruma parametrus, lai sÄ«kÄk nodalÄ«tu lietotÄju piekļuvi krÄtuvÄm un norobežotu pieprasÄ«jumiem pieejamos tvÄrumus.
- Pievienota formÄta opcija "%(ahead-behind: )", kas ļauj nekavÄjoties iegÅ«t informÄciju par noteiktÄ atzarÄ esoÅ”o vai neesoÅ”o saistÄ«bu skaitu attiecÄ«bÄ pret citu filiÄli (cik ļoti viena filiÄle atpaliek vai apsteidz citu saistÄ«bu lÄ«menÄ«). IepriekÅ” Ŕīs informÄcijas iegÅ«Å”anai bija nepiecieÅ”amas divas atseviŔķas komandas: "git rev-list --count main..my-feature", lai iegÅ«tu filiÄlei unikÄlo saistÄ«bu skaitu, un "git rev-list --count my-feature.. galvenaisā, lai iegÅ«tu trÅ«kstoÅ”o apÅemÅ”anos skaitu. Tagad Å”Ädus aprÄÄ·inus var samazinÄt lÄ«dz vienai instrukcijai, kas vienkÄrÅ”o rakstÄ«Å”anas apstrÄdÄtÄjus un samazina izpildes laiku. PiemÄram, lai parÄdÄ«tu nesapludinÄtos zarus un novÄrtÄtu, vai tie atrodas aiz vai priekÅ”Ä galvenajam atzaram, varat izmantot vienu lÄ«niju: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | kolonna -t tb/cruft-extra-tips 2 96 tb/for-each-ref ā izslÄdziet 16 96 tb/roaring-bitmaps 47 3 iepriekÅ” izmantotÄ skripta vietÄ, kas ir 17 reizes lÄnÄks: $ 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" "$ahead" darÄ«ts | kolonna -t tb/cruft-extra-tips 2 96 tb/katram-ref-izslÄgt 16 96 tb/rÅ«coÅ”as bitkartes 47 3
- Komandai "git fetch" ir pievienota opcija "--porcelain", kas Ä£enerÄ izvadi formÄtÄ " ā, mazÄk lasÄms, bet ÄrtÄk parsÄÅ”anai skriptos.
- Pievienots "fetch.hideRefs" iestatÄ«jums, lai paÄtrinÄtu "git fetch" darbÄ«bas, paslÄpjot daļu saiÅ”u lokÄlajÄ repozitorijÄ pÄrbaudes stadijÄ, kad serveris ir nosÅ«tÄ«jis visu objektu komplektu, kas ietaupa laiku, ierobežojot pÄrbaudi tikai serveros. no kuriem dati tiek tieÅ”i izgÅ«ti. PiemÄram, testÄjot sistÄmÄ ar krÄtuvÄm, kurÄs ir liels skaits izsekotu ÄrÄjo saiÅ”u, izslÄdzot visas saites, izÅemot tÄs, kas adresÄtas $remote mÄrÄ·a serverim, āgit fetchā darbÄ«ba tika samazinÄta no 20 minÅ«tÄm lÄ«dz 30 sekundÄm. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
- Komanda "git fsck" ievieÅ” iespÄju pÄrbaudÄ«t, vai pieejamÄ«bas bitkartÄs un reversajos indeksos nav bojÄjumu, kontrolsummu atbilstÄ«bas un vÄrtÄ«bu pareizÄ«bas.
- Komanda "git clone --local" tagad parÄda kļūdu, mÄÄ£inot kopÄt no repozitorija, kurÄ ir simboliskas saites iekÅ”Ä $GIT_DIR.
Avots: opennet.ru