Հասանելի է Git 2.41 աղբյուրի կառավարման համակարգը

Երեք ամսվա մշակումից հետո հրապարակվել է բաշխված աղբյուրի կառավարման համակարգի Git 2.41 թողարկումը: Git-ը տարբերակների կառավարման ամենահայտնի, հուսալի և բարձր կատարողական համակարգերից մեկն է, որն ապահովում է ճկուն ոչ գծային զարգացման գործիքներ՝ հիմնված ճյուղավորումների և միաձուլման վրա: Պատմության ամբողջականությունն ապահովելու և հետադարձ փոփոխությունների դիմադրությունը ապահովելու համար օգտագործվում է ամբողջ նախորդ պատմության անուղղակի հաշինգը յուրաքանչյուր կոմիտում, հնարավոր է նաև ստուգել անհատական ​​պիտակներ և թվային ստորագրություններ մշակողների կողմից:

Նախորդ թողարկման համեմատ՝ նոր տարբերակում ընդունվել է 542 փոփոխություն, որը պատրաստվել է 95 ծրագրավորողների մասնակցությամբ, որոնցից 29-ն առաջին անգամ մասնակցել են մշակմանը։ Հիմնական նորամուծությունները.

  • Բարելավված կառավարում անհասանելի օբյեկտների հետ, որոնց մասին հղումներ չկան պահոցում (ճյուղերը կամ պիտակները նշված չեն): Անհասանելի առարկաները հեռացվում են աղբահանի կողմից, սակայն հանելուց առաջ որոշակի ժամանակ մնում են պահեստում՝ մրցավազքի պայմաններից խուսափելու համար: Անհասանելի օբյեկտների ժամանակաշրջանին հետևելու համար անհրաժեշտ է դրանց վրա պիտակներ կապել նմանատիպ օբյեկտների փոփոխման ժամանակով, ինչը թույլ չի տալիս դրանք պահել մեկ փաթեթ-ֆայլում, որտեղ բոլոր օբյեկտներն ունեն ընդհանուր փոփոխության ժամանակ: Նախկինում յուրաքանչյուր անհասանելի օբյեկտ պահվում էր առանձին ֆայլում, ինչը հանգեցնում էր խնդիրների, եթե կային մեծ թվով թարմ անհասանելի օբյեկտներ, որոնք դեռ ենթակա չէին ջնջման: Նոր թողարկումում, լռելյայնորեն, «cruft packs» մեխանիզմն օգտագործվում է անհասանելի օբյեկտները փաթեթավորելու համար, ինչը թույլ է տալիս բոլոր անհասանելի առարկաները պահել մեկ փաթեթային ֆայլում և արտացոլել յուրաքանչյուր օբյեկտի փոփոխման ժամանակի տվյալները առանձին աղյուսակում, որը պահվում է աղյուսակում: ֆայլ «.mtimes» ընդլայնմամբ և կապակցված «.idx» ընդլայնմամբ ինդեքսային ֆայլի միջոցով:
    Հասանելի է Git 2.41 աղբյուրի կառավարման համակարգը
  • Լռելյայնորեն, փաթեթային ֆայլերի համար սկավառակի վրա հակադարձ ինդեքսի (revindex) պահպանումը միացված է: Երբ փորձարկվել է torvalds/linux շտեմարանների վրա, հակադարձ ինդեքսի օգտագործումը թույլ է տվել մեզ արագացնել ռեսուրսների ինտենսիվ «git push» գործողությունները 1.49 անգամ, և պարզ գործողությունները, ինչպիսիք են մեկ օբյեկտի չափը հաշվարկելը «git cat-ի» միջոցով: file --batch='%(objectsize:disk)' » 77 անգամ: Հակադարձ ինդեքսով ֆայլերը (.rev») կպահվեն պահեստի ներսում «.git/objects/pack» գրացուցակում:

    Հիշեցնենք, որ Git-ը պահպանում է բոլոր տվյալները օբյեկտների տեսքով, որոնք տեղադրվում են առանձին ֆայլերում։ Պահեստի հետ աշխատելու արդյունավետությունը բարձրացնելու համար օբյեկտները լրացուցիչ տեղադրվում են փաթեթային ֆայլերում, որոնցում տեղեկատվությունը ներկայացվում է մեկը մյուսի հետևից հաջորդող առարկաների հոսքի տեսքով (նման ձևաչափ օգտագործվում է git fetch-ով և git-ով օբյեկտներ փոխանցելիս. հրում հրամաններ): Յուրաքանչյուր փաթեթային ֆայլի համար ստեղծվում է ինդեքսային ֆայլ (.idx), որը թույլ է տալիս շատ արագ որոշել փաթեթային ֆայլի օֆսեթը, որով տվյալ օբյեկտը պահվում է օբյեկտի նույնացուցիչով։

    Նոր թողարկման մեջ ներառված հակադարձ ինդեքսն ուղղված է փաթեթի ֆայլում օբյեկտի գտնվելու վայրի մասին տեղեկություններից օբյեկտի ID-ի որոշման գործընթացի պարզեցմանը: Նախկինում նման փոխակերպումը կատարվում էր անմիջապես փաթեթի ֆայլի վերլուծության ժամանակ և պահվում էր միայն հիշողության մեջ, ինչը թույլ չէր տալիս նման ինդեքսների կրկնակի օգտագործումը և ստիպում էր ինդեքսն ամեն անգամ գեներացվել: Ինդեքս ստեղծելու գործառնությունը կրճատվում է օբյեկտ-դիրքի զույգերի զանգված ստեղծելով և այն ըստ դիրքի դասավորելու, ինչը կարող է երկար տևել մեծ փաթեթային ֆայլերի համար:

    Օրինակ՝ օբյեկտների բովանդակության ցուցադրման օպերացիան, որն օգտագործում է ուղղակի ինդեքս, 62 անգամ ավելի արագ է եղել, քան օբյեկտների չափը ցույց տալու օպերացիան, որի համար դիրք-օբյեկտ կապի տվյալները չեն ինդեքսավորվել։ Հակադարձ ցուցանիշն օգտագործելուց հետո այս գործողությունները սկսեցին տևել մոտավորապես նույն ժամանակ: Հակադարձ ինդեքսները նաև թույլ են տալիս արագացնել օբյեկտներ ուղարկելու գործողությունը fetch and push հրամանները կատարելիս՝ ուղղակիորեն պատրաստի տվյալները սկավառակից փոխանցելով:

    Հասանելի է Git 2.41 աղբյուրի կառավարման համակարգը

  • Ավելացվել է աջակցություն՝ հավատարմագրերի մշակողի և նույնականացման ծառայության միջև WWW-Authenticate վերնագրերը փոխանցելու համար «հավատարմագրերի օգնական» արձանագրությանը, որն օգտագործվում է հավատարմագրերը սահմանափակ պահեստներ մուտք գործելու ժամանակ: WWW-Authenticate վերնագրի աջակցությունը թույլ է տալիս OAuth-ի շրջանակի պարամետրերը փոխանցել օգտատերերի ավելի մանրակրկիտ առանձին մուտք դեպի պահեստներ և սահմանազատել հարցումների համար հասանելի շրջանակները:
  • Ավելացվեց ձևաչափի տարբերակ «% (առաջ-հետևում. )», որը թույլ է տալիս անմիջապես տեղեկատվություն ստանալ որոշակի ճյուղում առկա կամ բացակայող պարտավորությունների քանակի մասին՝ համեմատած մեկ այլ ճյուղի հետ (ինչքանով է մեկ ճյուղը զիջում կամ առաջ է անցնում մյուսից՝ պարտավորությունների մակարդակով): Նախկինում այս տեղեկատվությունը ստանալու համար պահանջվում էր երկու առանձին հրաման՝ «git rev-list --count main..my-feature»՝ ճյուղի համար եզակի պարտավորությունների թիվը ստանալու համար, և «git rev-list --count my-feature.. main»՝ բացակայող պարտավորությունների թիվը ստանալու համար: Այժմ նման հաշվարկները կարող են կրճատվել մինչև մեկ հրահանգ, որը հեշտացնում է գրավոր մշակողները և նվազեցնում կատարման ժամանակը: Օրինակ, չմիաձուլված ճյուղերը ցույց տալու և գնահատելու համար, թե արդյոք դրանք իրենց հիմնական ճյուղից ետևում են, թե առաջ, կարող եք օգտագործել մեկ գիծ՝ $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:short) %(ahead-behind :origin/HEAD)' \ refs/heads/tb/ | սյունակ -t tb/cruft-extra-tips 2 96 tb/for-each-ref-բացառել 16 96 tb/roaring-bitmaps 47 3 նախկինում օգտագործված սկրիպտի փոխարեն, որը 17 անգամ ավելի դանդաղ է. $ git-ի համար — ձևաչափ='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | while read ref do ahead="$(git rev-list --count origin/HEAD..$ref)"back="$(git rev-list --count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" կատարված | սյունակ -t tb/cruft-extra-tips 2 96 tb/for-each-ref-բացառել 16 96 tb/մռնչյուն-բիթքարտեզներ 47 3
  • «git fetch» ​​հրամանին ավելացվել է «--ճենապակու» տարբերակը, որն արտադրում է ելք ֆորմատով « », ավելի քիչ ընթեռնելի, բայց ավելի հարմար է սկրիպտներում վերլուծելու համար:
  • Ավելացվեց «fetch.hideRefs» կարգավորում՝ «git fetch» ​​գործողությունները արագացնելու համար՝ թաքցնելով հղումների մի մասը տեղական պահեստում՝ ստուգելու, թե արդյոք սերվերը ուղարկել է օբյեկտների ամբողջական փաթեթը, ինչը խնայում է ժամանակը՝ սահմանափակելով ստուգումը միայն սերվերներով։ որտեղից ուղղակիորեն վերցվում են տվյալներ: Օրինակ, երբ փորձարկում եք համակարգում պահեստարաններով, որոնք պարունակում են մեծ թվով հետևվող արտաքին հղումներ, բացառելով բոլոր հղումները, բացառությամբ $ հեռավոր թիրախային սերվերին հասցեագրվածների, «git fetch» ​​գործողությունը նվազեցրեց 20 րոպեից մինչև 30 վայրկյան: $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • «Git fsck» հրամանն իրականացնում է հասանելիության բիթքարտեզներում և հակադարձ ինդեքսներում կոռուպցիան, ստուգիչ գումարի համընկնումը և արժեքների ճշգրտությունը ստուգելու հնարավորությունը:
  • «git clone --local» հրամանն այժմ սխալ է ցուցադրում $GIT_DIR-ի ներսում խորհրդանշական հղումներ պարունակող պահեստից պատճենելիս:

Source: opennet.ru

Добавить комментарий