Disponohet sistemi i kontrollit të burimit Git 2.41

Pas tre muajsh zhvillimi, sistemi i kontrollit të burimit të shpërndarë Git 2.41 është lëshuar. Git është një nga sistemet më të njohura, më të besueshme dhe me performancë të lartë të kontrollit të versioneve, duke ofruar mjete zhvillimi fleksibël jo-lineare të bazuara në degëzimin dhe bashkimin. Për të siguruar integritetin e historisë dhe rezistencën ndaj ndryshimeve retroaktive, hashimi i nënkuptuar i të gjithë historisë së mëparshme përdoret në çdo kryerje; është gjithashtu e mundur të certifikohen etiketat dhe detyrimet individuale me nënshkrime dixhitale të zhvilluesve.

Krahasuar me versionin e mëparshëm, versioni i ri përfshinte 542 ndryshime, të përgatitura me pjesëmarrjen e 95 zhvilluesve, nga të cilët 29 morën pjesë në zhvillim për herë të parë. Risitë kryesore:

  • Trajtimi i përmirësuar i objekteve të paarritshme që nuk janë të referuara në depo (nuk referohen nga degët ose etiketat). Objektet e paarritshme fshihen nga mbledhësi i mbeturinave, por mbeten në depo për një kohë të caktuar përpara se të fshihen për të shmangur kushtet e garës. Për të gjurmuar periudhën e shfaqjes së objekteve të paarritshme, është e nevojshme t'u bashkëngjitni etiketa me kohën e ndryshimit të objekteve të ngjashme, gjë që nuk lejon ruajtjen e tyre në një skedar paketë në të cilin të gjitha objektet kanë një kohë të përbashkët ndryshimi. Më parë, çdo objekt i paarritshëm ruhej në një skedar të veçantë, gjë që çoi në probleme kur kishte një numër të madh objektesh të freskëta të paarritshme që nuk ishin ende të përshtatshme për fshirje. Në versionin e ri, mekanizmi "cruft packs" përdoret si parazgjedhje për paketimin e objekteve të paarritshme, i cili ju lejon të ruani të gjitha objektet e paarritshme në një skedar paketë, dhe të dhënat për kohën e modifikimit të secilit objekt pasqyrohen në një tabelë të veçantë, të ruajtur. në një skedar me ekstensionin “.mtimes” dhe të lidhur duke përdorur një skedar indeksi me shtesën “.idx”.
    Disponohet sistemi i kontrollit të burimit Git 2.41
  • Mbajtja e një indeksi të kundërt në disk për skedarët e paketës është aktivizuar si parazgjedhje. Gjatë testimit në depo torvalds/linux, përdorimi i një indeksi të kundërt bëri të mundur përshpejtimin e operacioneve "git push" intensive të burimeve me 1.49 herë dhe operacione të thjeshta si llogaritja e madhësisë së një objekti të vetëm duke përdorur "git cat- file —batch='%(objectsize:disk)' "77 herë. Skedarët (“rev”) me një indeks të kundërt do të ruhen brenda depove në drejtorinë “.git/objects/pack”.

    Kujtojmë që Git ruan të gjitha të dhënat në formën e objekteve, të cilat ndodhen në skedarë të veçantë. Për të rritur efikasitetin e punës me depon, objektet vendosen gjithashtu në skedarë paketë, në të cilat informacioni paraqitet në formën e një rryme objektesh që ndjekin njëri-tjetrin (një format i ngjashëm përdoret kur transferoni objekte me git fetch dhe git push komandat). Për çdo skedar paketë, krijohet një skedar indeksi (.idx), i cili ju lejon të përcaktoni shumë shpejt kompensimin në skedarin e paketës në të cilin ruhet objekti i dhënë duke përdorur identifikuesin e objektit.

    Indeksi i kundërt i përfshirë në versionin e ri ka për qëllim optimizimin e procesit të përcaktimit të identifikuesit të objektit nga informacioni rreth vendosjes së objektit në skedarin e paketës. Më parë, një konvertim i tillë kryhej menjëherë gjatë analizimit të skedarit të paketës dhe ruhej vetëm në memorie, gjë që nuk lejonte që indekset e ngjashme të ripërdoreshin dhe detyroi indeksin të gjenerohej çdo herë. Funksionimi i ndërtimit të një indeksi zbret në ndërtimin e një grupi çiftesh objekt-pozicioni dhe renditjen e tij sipas pozicionit, gjë që mund të marrë shumë kohë për skedarët e paketave të mëdha.

    Për shembull, një operacion për të shfaqur përmbajtjen e objekteve, i cili përdor një indeks të drejtpërdrejtë, ishte 62 herë më i shpejtë se një operacion për të shfaqur madhësinë e objekteve, për të cilat të dhënat pozicion-në-objekt nuk u indeksuan. Pas përdorimit të indeksit të kundërt, këto operacione filluan të zgjasin afërsisht të njëjtën kohë. Indekset e kundërta ju lejojnë gjithashtu të përshpejtoni operacionet e dërgimit të objekteve kur ekzekutoni komandat "fetch and push" duke transferuar drejtpërdrejt të dhëna të gatshme nga disku.

    Disponohet sistemi i kontrollit të burimit Git 2.41

  • Protokolli "ndihmues i kredencialeve", i përdorur për të transferuar kredencialet kur hyn në depo me akses të kufizuar, ka shtuar mbështetje për kalimin e titujve WWW-Authenticate midis mbajtësit të kredencialeve dhe shërbimit në të cilin kryhet vërtetimi. Mbështetja për kokën WWW-Authenticate ju lejon të kaloni parametrat e fushës së OAuth për një ndarje më të hollësishme të aksesit të përdoruesit në depo dhe përcaktimin e sferave të disponueshme për kërkesat.
  • U shtua opsioni i formatimit "%(përpara-prapa:" në komandën for-each-ref: )”, i cili ju lejon të merrni menjëherë informacione për numrin e kryerjeve të pranishme ose të munguara në një degë të caktuar, në raport me një degë tjetër (sa është një degë prapa ose përpara një tjetër në nivelin e kryerjes). Më parë, për të marrë një informacion të tillë, duhej të ekzekutonit dy komanda të veçanta: "git rev-list —count main..my-feature" për të marrë numrin e kryerjeve unik për degën dhe "git rev-list —count my-feature" ..main” për të marrë numrin e kryerjeve që mungojnë. Tani llogaritjet e tilla mund të reduktohen në një komandë të vetme, e cila thjeshton shkrimin e mbajtësve dhe zvogëlon kohën e ekzekutimit. Për shembull, për të treguar degët që nuk janë shkrirë dhe për të vlerësuar nëse janë prapa apo përpara degës kryesore, mund të përdorni një rreshtim me një rresht: $ git për-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(përpara-prapa :origjina/HEAD)' \refs/heads/tb/ | kolona -t tb/cruft-extra-tips 2 96 tb/for-eveach-ref—përjashtoni 16 96 tb/roaring-bitmaps 47 3 në vend të skriptit të përdorur më parë, i cili funksionon 17 herë më ngadalë: $ git për-secil-ref — format='%(refname:short)' —no-merged=origjina/HEAD \ refs/heads/tb | ndërsa lexoni ref do ahead="$(git rev-list -count origin/HEAD..$ref)"back="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$përpara" "$pas" bërë | kolona -t tb/cruft-ekstra-këshilla 2 96 tb/për-çdo-ref—përjashtoni 16 96 tb/bitmaps zhurmues 47 3
  • Opsioni "-porcelan" është shtuar në komandën "git fetch", kur specifikohet, prodhimi gjenerohet në formatin " ", më pak i lexueshëm, por më i përshtatshëm për analizim në skriptet.
  • U shtua cilësimi "fetch.hideRefs", i cili ju lejon të shpejtoni operacionet "git fetch" duke fshehur disa nga referencat në depon lokale në fazën e kontrollit nëse serveri ka dërguar një grup të plotë objektesh, gjë që kursen kohë duke duke kufizuar kontrollin vetëm për serverët nga të cilët merren të dhënat drejtpërdrejt. Për shembull, kur ekzekutoni një test në një sistem me depo që përmbajnë një numër të madh lidhjesh të jashtme të gjurmuara, duke përjashtuar të gjitha lidhjet, përveç atyre të adresuara te serveri i synuar $remote, e zvogëloi ekzekutimin e operacionit të tërheqjes git nga 20 minuta në 30 sekonda. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Komanda "git fsck" ofron mundësinë për të kontrolluar për korrupsion, pajtueshmërinë e shumës së kontrollit dhe korrektësinë e vlerave në bitmap-të e aksesueshmërisë dhe indekset e kundërta.
  • Komanda "git clone --local" shfaq tani një gabim kur përpiqet të kopjojë nga një depo që përmban lidhje simbolesh brenda $GIT_DIR.

Burimi: opennet.ru

Shto një koment