Git 2.41 boarne kontrôle systeem beskikber

Nei trije moannen fan ûntwikkeling is de frijlitting fan it ferspraat boarnekontrôlesysteem Git 2.41 publisearre. Git is ien fan 'e populêrste, betroubere en heechprestearjende ferzjekontrôlesystemen dy't fleksibele net-lineêre ûntwikkelingsynstruminten leveret basearre op tûken en gearfoegjen fan tûken. Om de yntegriteit fan 'e skiednis en ferset tsjin retroaktive wizigingen te garandearjen, wurdt ymplisite hashing fan' e hiele foarige skiednis yn elke commit brûkt, it is ek mooglik om yndividuele tags te ferifiearjen en commits mei digitale hantekeningen fan 'e ûntwikkelders.

Yn ferliking mei de foarige release waarden 542 wizigingen akseptearre yn 'e nije ferzje, taret mei de dielname fan 95 ûntwikkelders, wêrfan 29 foar it earst meidien oan 'e ûntwikkeling. Wichtichste ynnovaasjes:

  • Ferbettere ôfhanneling fan net te berikken objekten dy't net ferwiisd wurde yn 'e repository (tûken of tags wurde net ferwiisd). Unberikbere foarwerpen wurde fuorthelle troch de garbage collector, mar bliuwe foar in bepaalde tiid yn 'e repository foar it fuortheljen om racebetingsten te foarkommen. Om de perioade fan ûnberikbere objekten by te hâlden, is it nedich om etiketten oan har te binen mei de feroaringstiid fan ferlykbere objekten, wat net tastean se op te slaan yn ien pack-bestân, wêryn alle objekten in mienskiplike wizigingstiid hawwe. Earder waard elk net te berikken objekt opslein yn in apart bestân, wat liedt ta problemen as der in grut tal farske net te berikken objekten wiene dy't noch net ûnderwurpen binne oan wiskjen. Yn 'e nije release wurdt standert it meganisme "cruft packs" brûkt om ûnberikbere objekten yn te pakken, wêrtroch alle ûnberikbere objekten kinne wurde opslein yn ien pakketbestân, en de gegevens reflektearje oer de wizigingstiid fan elk objekt yn in aparte tabel opslein yn in bestân mei de tafoeging ".mtimes" en keppele mei in yndeksbestân mei de tafoeging ".idx".
    Git 2.41 boarne kontrôle systeem beskikber
  • Standert is it behâld fan in omkearde yndeks (revindex) op skiif foar pakbestannen ynskeakele. As test op 'e torvalds / linux repositories, koe it gebrûk fan in omkearde yndeks ús boarne-yntinsive "git push" operaasjes mei 1.49 kear fersnelle, en ienfâldige operaasjes, lykas it berekkenjen fan de grutte fan in inkeld objekt mei "git cat- file --batch='%(objectsize:disk)' » 77 kear. Triemmen (".rev") mei in omkearde yndeks wurde opslein yn it repository yn 'e map ".git/objects/pack".

    Tink derom dat Git alle gegevens bewarret yn 'e foarm fan objekten, dy't yn aparte bestannen pleatst wurde. Om de effisjinsje fan it wurkjen mei it repository te fergrutsjen, wurde objekten ek pleatst yn pakketbestannen, wêryn ynformaasje wurdt presintearre yn 'e foarm fan in stream fan objekten dy't de iene nei de oare folgje (in ferlykber formaat wurdt brûkt by it oerdragen fan objekten mei de git fetch en git push opdrachten). In yndeks triem (.idx) wurdt makke foar eltse pack triem, dat kinne jo hiel fluch bepale de offset yn de pack triem wêrmei de opjûne foarwerp wurdt opslein troch de foarwerp identifier.

    De omkearde yndeks opnommen yn 'e nije release is rjochte op it streamlynjen fan it proses fan it bepalen fan it objekt-ID út ynformaasje oer de lokaasje fan it objekt yn it pakketbestân. Eartiids waard sa'n konverzje op 'e flecht útfierd by it parsearjen fan' e pakbestân en waard allinich yn it ûnthâld opslein, wat gjin werbrûk fan sokke yndeksen tastien en de yndeks twongen om elke kear te generearjen. De wurking fan it bouwen fan in yndeks wurdt fermindere ta it bouwen fan in array fan objekt-posysje-pearen en sortearje it op posysje, wat in lange tiid kin duorje foar grutte pakketbestannen.

    Bygelyks, de wurking fan it werjaan fan de ynhâld fan objekten, dy't in direkte yndeks brûkt, wie 62 kear flugger as de operaasje fan it werjaan fan de grutte fan objekten, wêrfoar de posysje-oan-objekt relaasjegegevens net yndeksearre waarden. Nei it brûken fan de omkearde yndeks, dizze operaasjes begûn te nimmen likernôch deselde tiid. Omkearde yndeksen kinne jo ek de wurking fan it ferstjoeren fan objekten fersnelle by it útfieren fan fetch- en push-kommando's troch direkt oerdracht fan klearmakke gegevens fan skiif.

    Git 2.41 boarne kontrôle systeem beskikber

  • Stipe tafoege foar it trochjaan fan WWW-Authenticate-koppen tusken de credential-handler en de autentikaasjetsjinst oan it protokol "credential helper" dat brûkt wurdt om bewiisbrieven troch te jaan by tagong ta beheinde repositories. Stipe foar de WWW-Authenticate-koptekst lit jo OAuth-omfangparameters trochjaan om mear detaillearre brûkerstagong ta repositories te skieden en de berik beskikber te beheinen foar oanfragen.
  • Opmaakopsje tafoege "%(ahead-behind: )", wêrtroch jo daliks ynformaasje kinne krije oer it oantal commits oanwêzich of ôfwêzich yn in bepaalde branch, relatyf oan in oare tûke (hoefolle ien tûke op it nivo fan commits efter of foar in oar bliuwt). Eartiids easke it krijen fan dizze ynformaasje twa aparte kommando's: "git rev-list --count main..my-feature" om it oantal commits unyk foar in branch te krijen, en "git rev-list --count my-feature. main" om it oantal ûntbrekkende commits te krijen. No kinne sokke berekkeningen wurde fermindere ta ien ynstruksje, dy't skriuwhannelers ferienfâldiget en de útfieringstiid ferminderet. Bygelyks, om net gearfoege tûken wer te jaan en te evaluearjen oft se efter of foar har haadtûke binne, kinne jo in one-liner brûke: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | kolom -t tb/cruft-extra-tips 2 96 tb/for-each-ref—útslute 16 96 tb/roaring-bitmaps 47 3 ynstee fan it earder brûkte skript, dat 17 kear stadiger is: $ git for-each-ref — format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | wylst read ref do ahead="$(git rev-list --count origin/HEAD..$ref)" efter="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" dien | kolom -t tb/cruft-ekstra-tips 2 96 tb/foar-elke-ref—útslute 16 96 tb/roaring-bitmaps 47 3
  • Tafoege "--porselein" opsje oan "git fetch" kommando, dat generearret útfier yn it formaat " ”, minder lêsber, mar handiger foar parsearjen yn skripts.
  • Ynstelling "fetch.hideRefs" tafoege om operaasjes "git fetch" te fersnellen troch in diel fan 'e keppelings yn' e lokale repository te ferbergjen op it poadium fan ferifiearjen dat de tsjinner de folsleine set fan objekten stjoerde, wat tiid besparret troch de kontrôle allinich te beheinen ta servers wêrfan gegevens direkt ophelle wurde. Bygelyks, by it testen op in systeem mei repositories dy't in grut oantal tracked eksterne keppelings befetsje, útsein alle keppelings útsein dy dy't rjochte binne oan 'e $-ôfstânsdoeltsjinner, fermindere de operaasje "git fetch" fan 20 minuten nei 30 sekonden. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ heljen $remote
  • It kommando "git fsck" ymplementearret de mooglikheid om te kontrolearjen op korrupsje, kontrôlesum oerienkomst, en krektens fan wearden yn bitmaps foar tagonklikens en omkearde yndeksen.
  • It kommando "git clone --local" toant no in flater as jo besykje te kopiearjen fan in repository mei symboalyske keppelings binnen $GIT_DIR.

Boarne: opennet.ru

Add a comment