Git 2.41 iturburua kontrolatzeko sistema eskuragarri

Hiru hilabeteko garapenaren ondoren, Git 2.41 banatutako iturburu-kontrol sistemaren oharra argitaratu da. Git bertsioak kontrolatzeko sistema ezagunenetako, fidagarri eta errendimendu handikoenetariko bat da, adarretako eta bategitean oinarritutako garapen-tresna ez-lineal malguak eskaintzen dituena. Historiaren osotasuna eta aldaketa atzerakoiekiko erresistentzia bermatzeko, aurreko historia osoaren hashing inplizitua erabiltzen da konpromiso bakoitzean, eta garatzaileen sinadura digitalekin etiketa eta konpromiso indibidualak egiaztatzeko aukera ere badago.

Aurreko bertsioarekin alderatuta, 542 aldaketa onartu ziren bertsio berrian, 95 garatzaileren parte-hartzearekin prestatuta, horietatik 29k garapenean parte hartu zuten lehen aldiz. Berrikuntza nagusiak:

  • Biltegian erreferentziarik ez duten objektu irisgarrien kudeaketa hobetu da (adarrak edo etiketak ez daude erreferentziarik). Lortu ezin diren objektuak zabor-biltzaileak kentzen ditu, baina kendu aurretik denbora jakin batean biltegian geratzen dira lasterketa-baldintzak saihesteko. Objektu eskuraezinen denboraren jarraipena egiteko, beharrezkoa da etiketak antzeko objektuen aldaketa-denborarekin lotzea, eta horrek ez du onartzen pakete-fitxategi batean gordetzea, zeinetan objektu guztiek aldaketa-denbora komuna duten. Aurretik, eskuraezina den objektu bakoitza fitxategi bereizi batean gordetzen zen, eta horrek arazoak sorrarazten zituen oraindik ezabatzeko gai ez ziren objektu iristezinen kopuru handi bat bazeuden. Bertsio berrian, lehenespenez, "cruft paketeak" mekanismoa erabiltzen da eskuraezinak diren objektuak ontziratzeko, eta horrek aukera ematen du eskuraezin diren objektu guztiak pakete-fitxategi batean gordetzeko, eta objektu bakoitzaren aldaketa-denborari buruzko datuak taula batean gordetako beste taula batean islatzeko. ".mtimes" luzapena duen fitxategia eta ".idx" luzapena duen indize fitxategi bat erabiliz estekatuta.
    Git 2.41 iturburua kontrolatzeko sistema eskuragarri
  • Lehenespenez, pakete-fitxategietarako alderantzizko indizea (revindex) mantentzea gaituta dago diskoan. Torvalds/linux biltegietan probatu zenean, alderantzizko indizea erabiltzeari esker, baliabide intentsiboko "git push" eragiketak 1.49 aldiz bizkortu genituen, eta eragiketa errazak, hala nola objektu bakar baten tamaina kalkulatzeko "git cat-" erabiliz. fitxategia --batch='%(objectsize:disk)' Β» 77 aldiz. Alderantzizko indizea duten fitxategiak (".rev") biltegian gordeko dira ".git/objects/pack" direktorioan.

    Gogoratu Git-ek datu guztiak objektu moduan gordetzen dituela, fitxategi bereizietan jartzen direla. Biltegiarekin lan egiteko eraginkortasuna areagotzeko, objektuak pakete-fitxategietan jartzen dira, eta informazioa objektu-korronte baten forman aurkezten da bata bestearen atzetik (antzeko formatu bat erabiltzen da git fetch eta git-ekin objektuak transferitzean. push komandoak). Pakete-fitxategi bakoitzerako indize-fitxategi bat (.idx) sortzen da, eta horri esker, pakete-fitxategian desplazamendua zein den zehaztu dezakezu objektu-identifikatzaileak emandako objektua.

    Argitalpen berrian sartutako alderantzizko indizeak objektuaren IDa zehazteko prozesua arintzea du helburu, pakete-fitxategian objektuaren kokapenari buruzko informaziotik. Aurretik, bihurketa hori hegan egiten zen pakete-fitxategia analizatzean eta memorian bakarrik gordetzen zen, eta horrek ez zituen indize horiek berrerabiltzen uzten eta indizea sortzera behartzen zuen bakoitzean. Indize bat eraikitzeko eragiketa objektu-posizio bikoteen sorta bat eraikitzera eta posizioaren arabera ordenatzera murrizten da, eta horrek denbora luzea izan dezake pakete-fitxategi handietarako.

    Adibidez, objektuen edukia bistaratzeko eragiketa, indize zuzena erabiltzen duena, objektuen tamaina erakusteko eragiketa baino 62 aldiz azkarragoa izan zen, horretarako posizio-objektu-erlazio-datuak ez ziren indexatu. Alderantzizko indizea erabili ondoren, eragiketa hauek gutxi gorabehera denbora bera hartzen hasi ziren. Alderantzizko indizeek objektuak bidaltzeko eragiketa bizkortzeko aukera ere ematen dute lortu eta push komandoak exekutatzen direnean, prest egindako datuak diskotik zuzenean transferituz.

    Git 2.41 iturburua kontrolatzeko sistema eskuragarri

  • Kredentzial-kudeatzailearen eta autentifikazio-zerbitzuaren artean WWW-Authenticate goiburuak pasatzeko euskarria gehitu zaio "kredentzialen laguntzailea" protokoloari, biltegi mugatuetan sartzean kredentzialak pasatzeko. WWW-Authenticate goiburuaren laguntzari esker, OAuth esparruaren parametroak pasa ditzakezu erabiltzaileen biltegietarako sarbide zehatzagoetara eta eskaeretarako erabilgarri dauden esparruak mugatzeko.
  • "%(ahead-behind:) formatu aukera gehitu da )", adar jakin batean dauden edo ez dauden konpromezu kopuruari buruzko informazioa berehala jasotzeko aukera ematen duena, beste adar bati dagokionez (konpromiso mailan adar bat zenbat atzean dagoen edo beste baten aurretik dagoen). Aurretik, informazio hori lortzeko bi komando bereizi behar ziren: "git rev-list --count main..my-feature" adar bateko konpromisoen kopurua esklusiboki lortzeko, eta "git rev-list --count my-feature.. main" falta diren konpromiso kopurua lortzeko. Orain, honelako kalkuluak instrukzio bakar batera murriztu daitezke, eta horrek idazketa-kudeatzaileak errazten ditu eta exekuzio-denbora murrizten du. Adibidez, bateratu gabeko adarrak bistaratzeko eta beren adar nagusiaren atzetik edo aurretik dauden ebaluatzeko, lerro bakarreko bat erabil dezakezu: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | zutabea -t tb/cruft-extra-tips 2 96 tb/for-each-ref β€” baztertu 16 96 tb/roaring-bitmaps 47 3 aurretik erabilitako scriptaren ordez, hau da, 17 aldiz motelagoa dena: $ git for-each-ref - format='%(refname:short)' --no-merged=jatorria/HEAD \ refs/heads/tb | ref read 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" eginda | zutabea -t tb/cruft-extra-tips 2 96 tb/for-each-refβ€”baztertu 16 96 tb/roaring-bitmaps 47 3
  • "--porcelain" aukera gehitu da "git fetch" komandoari, irteera sortzen duena " formatuan " ”, gutxiago irakurgarria, baina erosoagoa scriptetan analizatzeko.
  • "fetch.hideRefs" ezarpena gehitu da "git fetch" eragiketak bizkortzeko, tokiko biltegian esteken zati bat ezkutatuz zerbitzariak objektu-multzo osoa bidali zuela egiaztatzeko fasean, eta horrek denbora aurrezten du egiaztapena zerbitzarietara soilik mugatuz. bertatik zuzenean ateratzen diren datuak. Esaterako, jarraipeneko kanpoko esteka kopuru handia duten biltegiak dituen sistema batean probatzean, $remote helburuko zerbitzariari zuzendutakoak izan ezik esteka guztiak kenduta, "git fetch" eragiketa 20 minututik 30 segundora murriztu zen. $ git -c fetch.hideRefs=errefs -c fetch.hideRefs=!refs/remotes/$remote \ getch $remote
  • "git fsck" komandoak erabilerraztasun bitmapetan eta alderantzizko indizeetan ustelkeria, checksum bat etortzea eta balioen zuzentasuna egiaztatzeko gaitasuna ezartzen du.
  • "git clone --local" komandoak errore bat erakusten du $GIT_DIR barruan esteka sinbolikoak dituen biltegi batetik kopiatzen saiatzean.

Iturria: opennet.ru

Gehitu iruzkin berria