Mfumo wa udhibiti wa chanzo wa Git 2.41 unapatikana

Baada ya miezi mitatu ya maendeleo, mfumo wa udhibiti wa chanzo uliosambazwa Git 2.41 umetolewa. Git ni mojawapo ya mifumo maarufu zaidi, inayotegemewa na yenye utendakazi wa hali ya juu ya udhibiti wa toleo, ikitoa zana rahisi za ukuzaji zisizo za mstari kulingana na matawi na kuunganisha. Ili kuhakikisha uadilifu wa historia na upinzani dhidi ya mabadiliko yanayorudiwa nyuma, hashing isiyo wazi ya historia nzima ya awali katika kila ahadi inatumika, na inawezekana pia kuthibitisha lebo za kibinafsi na ahadi kwa saini za dijiti za wasanidi programu.

Ikilinganishwa na toleo la awali, toleo jipya lilijumuisha mabadiliko 542, yaliyotayarishwa na ushiriki wa watengenezaji 95, ambao 29 walishiriki katika maendeleo kwa mara ya kwanza. Ubunifu kuu:

  • Utunzaji ulioboreshwa wa vitu visivyoweza kufikiwa ambavyo havijarejelewa kwenye hazina (havijarejelewa na matawi au lebo). Vitu visivyoweza kufikiwa vinafutwa na mtoza takataka, lakini kubaki kwenye ghala kwa muda fulani kabla ya kufutwa ili kuepusha hali ya mbio. Kufuatilia kipindi cha tukio la vitu visivyoweza kufikiwa, ni muhimu kuunganisha vitambulisho kwao na wakati wa mabadiliko ya vitu sawa, ambayo hairuhusu kuzihifadhi kwenye faili moja ya pakiti ambayo vitu vyote vina wakati wa mabadiliko ya kawaida. Hapo awali, kila kitu kisichoweza kufikiwa kilihifadhiwa kwenye faili tofauti, ambayo ilisababisha matatizo wakati kulikuwa na idadi kubwa ya vitu vipya visivyoweza kufikiwa ambavyo bado havijastahiki kufutwa. Katika toleo jipya, utaratibu wa "pakiti za cruft" hutumiwa kwa chaguo-msingi kwa kufunga vitu visivyoweza kufikiwa, ambayo hukuruhusu kuhifadhi vitu vyote visivyoweza kufikiwa kwenye faili moja ya pakiti, na data juu ya wakati wa urekebishaji wa kila kitu huonyeshwa kwenye jedwali tofauti, lililohifadhiwa. katika faili iliyo na kiendelezi ".mtimes" na kuunganishwa kwa kutumia faili ya faharasa yenye kiendelezi ".idx".
    Mfumo wa udhibiti wa chanzo wa Git 2.41 unapatikana
  • Kudumisha index ya nyuma kwenye diski kwa faili za pakiti huwezeshwa kwa chaguo-msingi. Wakati wa kujaribu kwenye hazina ya torvalds/linux, utumiaji wa faharisi ya nyuma ulifanya iwezekane kuharakisha shughuli za "git push" zinazotumia rasilimali kwa mara 1.49, na shughuli rahisi kama vile kuhesabu saizi ya kitu kimoja kwa kutumia "git cat- file β€”batch='%(objectsize:disk)' "mara 77. Faili (β€œ.rev”) zilizo na faharasa ya kinyume zitahifadhiwa ndani ya hazina katika saraka ya β€œ.git/objects/pack”.

    Kumbuka kwamba Git huhifadhi data zote kwa namna ya vitu, ambavyo viko katika faili tofauti. Ili kuongeza ufanisi wa kufanya kazi na hazina, vitu huwekwa kwenye faili za pakiti, ambayo habari huwasilishwa kwa namna ya mtiririko wa vitu vinavyofuatana (muundo sawa hutumiwa wakati wa kuhamisha vitu na git fetch na git push. amri). Kwa kila faili ya pakiti, faili ya index (.idx) imeundwa, ambayo inakuwezesha kuamua haraka sana kukabiliana katika faili ya pakiti ambayo kitu kilichotolewa kinahifadhiwa kwa kutumia kitambulisho cha kitu.

    Faharasa ya kinyume iliyojumuishwa katika toleo jipya inalenga kuboresha mchakato wa kubainisha kitambulisho cha kitu kutoka kwa taarifa kuhusu uwekaji wa kitu kwenye faili ya pakiti. Hapo awali, ubadilishaji kama huo ulifanyika kwa kuruka wakati wa kuchanganua faili ya pakiti na ilihifadhiwa tu kwenye kumbukumbu, ambayo haikuruhusu fahirisi zinazofanana kutumika tena na kulazimisha faharisi kuzalishwa kila wakati. Uendeshaji wa kuunda faharasa unakuja hadi kuunda safu ya jozi za nafasi ya kitu na kuipanga kwa mkao, ambayo inaweza kuchukua muda mrefu kwa faili kubwa za pakiti.

    Kwa mfano, operesheni ya kuonyesha yaliyomo ya vitu, ambayo hutumia index ya moja kwa moja, ilikuwa mara 62 kwa kasi zaidi kuliko operesheni ya kuonyesha ukubwa wa vitu, ambayo data ya nafasi-kwa-kitu haikuonyeshwa. Baada ya kutumia faharisi ya nyuma, shughuli hizi zilianza kuchukua takriban wakati huo huo. Faharisi za kugeuza pia hukuruhusu kuharakisha utumaji wa kitu wakati wa kutekeleza amri za kuleta na kushinikiza kwa kuhamisha moja kwa moja data iliyotengenezwa tayari kutoka kwa diski.

    Mfumo wa udhibiti wa chanzo wa Git 2.41 unapatikana

  • Itifaki ya "msaidizi wa kitambulisho", inayotumiwa kuhamisha vitambulisho wakati wa kufikia hazina zilizo na ufikiaji mdogo, imeongeza usaidizi wa kupitisha vichwa vya WWW-Thibitisha kati ya kidhibiti cha kitambulisho na huduma ambayo uthibitishaji unafanywa. Usaidizi wa kichwa cha WWW-Thibitisha hukuruhusu kupitisha vigezo vya upeo wa OAuth kwa utengano wa punjepunje zaidi wa ufikiaji wa watumiaji kwenye hazina na kuweka mipaka ya mawanda yanayopatikana kwa maombi.
  • Chaguo la umbizo lililoongezwa "%(mbele-nyuma:" kwa amri ya kila-ref: )", ambayo hukuruhusu kupata habari mara moja juu ya idadi ya ahadi zilizopo au kutokuwepo katika tawi fulani, linalohusiana na tawi lingine (ni kiasi gani tawi moja liko nyuma au mbele ya lingine kwa kiwango cha ahadi). Hapo awali, ili kupata habari kama hiyo, ulihitaji kutekeleza amri mbili tofauti: "git rev-list -count main..my-feature" ili kupata idadi ya majukumu ya kipekee kwa tawi na "git rev-list -count my-feature" ..main” kupata nambari zinazokosekana ahadi. Sasa mahesabu hayo yanaweza kupunguzwa kwa amri moja, ambayo hurahisisha uandishi wa washughulikiaji na kupunguza muda wa utekelezaji. Kwa mfano, ili kuonyesha matawi ambayo hayajaunganishwa na kutathmini kama yako nyuma au mbele ya tawi kuu, unaweza kutumia mjengo mmoja: $ git for-each-ref -no-merged=origin/HEAD \ -format. ='%(refname:short) %(mbele-nyuma :origin/HEAD)' \refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref-ondoa 16 96 tb/roaring-bitmaps 47 3 badala ya hati iliyotumika hapo awali, ambayo inaendeshwa polepole mara 17: $ git for-each-ref β€” umbizo='%(jina upya:fupi)' β€”no-merged=origin/HEAD \ refs/heads/tb | wakati unasoma ref do ahead="$(git rev-list -count origin/HEAD..$ref)" nyuma="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" imekamilika | safu -t tb/cruft-ziada-vidokezo 2 96 tb/kwa-kila rejeleoβ€”ondoa 16 96 tb/nguruma-bitmaps 47 3
  • Chaguo la "-porcelain" limeongezwa kwa amri ya "git fetch", inapobainishwa, pato hutolewa katika umbizo " ", haisomeki, lakini inafaa zaidi kwa uchanganuzi katika hati.
  • Imeongeza mpangilio wa "fetch.hideRefs", unaokuruhusu kuharakisha shughuli za "git fetch" kwa kuficha baadhi ya marejeleo kwenye hazina ya ndani katika hatua ya kuangalia kama seva imetuma seti kamili ya vitu, ambayo huokoa muda kuweka kikomo cheki kwa seva ambazo data hutolewa moja kwa moja. Kwa mfano, wakati wa kufanya jaribio kwenye mfumo ulio na hazina zilizo na idadi kubwa ya viungo vya nje vinavyofuatiliwa, bila kujumuisha viungo vyote isipokuwa vile vilivyoelekezwa kwa seva lengwa ya $remote vilipunguza utekelezaji wa operesheni ya kuleta git kutoka dakika 20 hadi sekunde 30. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ leta $remote
  • Amri ya "git fsck" hutoa uwezo wa kuangalia ufisadi, utiifu wa hundi, na usahihi wa thamani katika ramani-bit za ufikivu na faharasa za kugeuza.
  • Amri ya "git clone --local" sasa inaonyesha hitilafu wakati wa kujaribu kunakili kutoka kwenye hazina ambayo ina ulinganifu ndani ya $GIT_DIR.

Chanzo: opennet.ru

Kuongeza maoni