Git 2.41 системаи идоракунии манбаъ дастрас аст

Пас аз се моҳи таҳия, системаи идоракунии сарчашмаҳои тақсимшудаи Git 2.41 бароварда шуд. Git яке аз маъмултарин, боэътимод ва сермахсули системаҳои идоракунии версия мебошад, ки асбобҳои тағйирпазири рушди ғайрихаттӣ дар асоси шохаҳо ва муттаҳидшавиро таъмин мекунад. Барои таъмини якпорчагии таърих ва муқовимат ба тағиротҳои ретроактивӣ, дар ҳар як супоридани ҳашингии ғайримустақими тамоми таърихи қаблӣ истифода мешавад; инчунин мумкин аст, ки тегҳо ва ӯҳдадориҳои инфиродӣ бо имзои рақамии таҳиягарон тасдиқ карда шаванд.

Дар муқоиса бо версияи қаблӣ, версияи нав 542 тағиротро дар бар мегирад, ки бо иштироки 95 таҳиягар омода шудааст, ки 29 нафари онҳо бори аввал дар таҳия ширкат кардаанд. Навовариҳои асосӣ:

  • Муносибати беҳтаршудаи объектҳои дастнорас, ки дар анбор истинод карда нашудаанд (бо шохаҳо ё тегҳо истинод карда намешаванд). Объектҳои дастнорас аз ҷониби коллектори ахлот нест карда мешаванд, аммо пеш аз нест кардани онҳо барои пешгирӣ кардани шароити мусобиқа дар репозиторий муддати муайян мемонанд. Барои пайгирии давраи пайдоиши объектҳои дастнорас, ба онҳо тегҳоро бо вақти тағирёбии объектҳои шабеҳ замима кардан лозим аст, ки ин имкон намедиҳад, ки онҳо дар як файли баста нигоҳ дошта шаванд, ки дар он ҳама объектҳо вақти умумии тағирёбанда доранд. Пештар, ҳар як объекти дастнорас дар файли алоҳида нигоҳ дошта мешуд, ки ҳангоми мавҷудияти шумораи зиёди объектҳои тозаи дастнорас, ки ҳанӯз барои ҳазф мувофиқ набуданд, боиси мушкилот мешуд. Дар версияи нав, механизми "cruft packs" ба таври нобаёнӣ барои бастабандии объектҳои дастнорас истифода мешавад, ки ба шумо имкон медиҳад, ки ҳамаи объектҳои дастнорасро дар як файли баста нигоҳ доред ва маълумотро дар бораи вақти тағир додани ҳар як объект дар ҷадвали алоҳида инъикос кунед, ки дар файл бо тамдиди ".mtimes" ва бо истифода аз файли индекс бо тамдиди ".idx" пайваст.
    Git 2.41 системаи идоракунии манбаъ дастрас аст
  • Нигоҳ доштани индекси баръакс дар диск барои файлҳои баста ба таври нобаёнӣ фаъол аст. Ҳангоми санҷиш дар анбори torvalds/linux, истифодаи индекси баръакс имкон дод, ки амалиёти "git push" -и захираҳо 1.49 маротиба ва амалиётҳои оддӣ ба монанди ҳисоб кардани андозаи як объект бо истифода аз "git cat-" file —batch='%(objectsize:disk)' "77 маротиба. Файлҳои («.rev») бо индекси баръакс дар дохили анбор дар директорияи ".git/objects/pack" нигоҳ дошта мешаванд.

    Ёдовар мешавем, ки Git ҳама маълумотро дар шакли объектҳое нигоҳ медорад, ки дар файлҳои алоҳида ҷойгиранд. Барои баланд бардоштани самаранокии кор бо репозиторий объектҳо ба таври иловагӣ дар файлҳои баста ҷойгир карда мешаванд, ки дар онҳо маълумот дар шакли ҷараёни объектҳои пас аз ҳамдигар пешниҳод карда мешавад (формати шабеҳ ҳангоми интиқоли объектҳо бо git fetch ва git push истифода мешавад. фармонҳо). Барои ҳар як файли пакетӣ файли индекс (.idx) сохта мешавад, ки ба шумо имкон медиҳад, ки ҷубронро дар файли бастае, ки дар он объекти додашуда бо истифода аз идентификатори объект нигоҳ дошта мешавад, хеле зуд муайян кунед.

    Индекси баръакс, ки ба нашри нав дохил карда шудааст, ба оптимизатсияи раванди муайян кардани идентификатори объект аз маълумот дар бораи ҷойгиркунии объект дар файли баста нигаронида шудааст. Қаблан, чунин табдилдиҳӣ ҳангоми таҳлили файли бастаҳо ба таври фаврӣ анҷом дода мешуд ва танҳо дар хотира нигоҳ дошта мешуд, ки ин имкон намедод, ки индексҳои шабеҳ дубора истифода шаванд ва ҳар дафъа индексро маҷбур мекарданд. Амалиёти сохтани индекс ба сохтани массиви ҷуфтҳои объекти мавқеъ ва ҷудо кардани он аз рӯи мавқеъ вобаста аст, ки барои файлҳои бастаи калон вақти зиёдро талаб мекунад.

    Масалан, амалиёти намоиши мундариҷаи объектҳо, ки индекси мустақимро истифода мебарад, назар ба амалиёти намоиши андозаи объектҳо, ки барои онҳо маълумотҳои мавқеъ ба объект индексатсия карда нашудаанд, 62 маротиба тезтар буд. Пас аз истифодаи индекси баръакс, ин амалиётҳо тақрибан як вақтро мегиранд. Индексҳои баръакс инчунин ба шумо имкон медиҳанд, ки амалиёти фиристодани объектро ҳангоми иҷрои фармонҳои гирифтан ва пахшкунӣ тавассути интиқоли мустақими маълумоти тайёр аз диск суръат бахшед.

    Git 2.41 системаи идоракунии манбаъ дастрас аст

  • Протоколи "ёрирасони эътимоднома", ки барои интиқоли маълумотҳо ҳангоми дастрасӣ ба анборҳои дастрасии маҳдуд истифода мешавад, барои интиқоли сарлавҳаҳои WWW-Authenticate байни коркардкунандаи маълумоти эътимоднок ва хидмате, ки дар он аутентификатсия анҷом дода мешавад, дастгирӣ кардааст. Дастгирии сарлавҳаи WWW-Authenticate ба шумо имкон медиҳад, ки параметрҳои миқёси OAuth-ро барои ҷудоии бештари дастрасии корбар ба анборҳо ва ҷудокунии миқёси дастрас барои дархостҳо интиқол диҳед.
  • Опсияи форматкунии "%(ahead-behind:" ба фармони for-each-ref илова карда шуд: )", ки ба шумо имкон медиҳад, ки фавран дар бораи шумораи ӯҳдадориҳо дар як филиали муайян, нисбат ба филиали дигар маълумот гиред (чӣ қадар як филиал аз дигараш дар сатҳи ӯҳдадорӣ қафо ё пеш аст). Пештар, барои ба даст овардани чунин маълумот, ба шумо лозим буд, ки ду фармони алоҳидаро иҷро кунед: "git rev-list —count main..my-feature" барои ба даст овардани шумораи супоришҳои беназири филиал ва "git rev-list —count my-feature" ..маин» барои гирифтани шумораи камбуднхо. Акнун чунин ҳисобҳоро метавон ба як фармон кам кард, ки ин навиштани коркардкунандагонро осон мекунад ва вақти иҷроро кам мекунад. Масалан, барои нишон додани шохаҳои муттаҳиднашуда ва муайян кардани он, ки онҳо дар паси шохаи асосӣ ҳастанд ё пештар, шумо метавонед як сатрро истифода баред: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(пеш-пас :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 for-each-ref — формат='%(refname: short)' —no-meged=origin/HEAD \ refs/heads/tb | ҳангоми хондани ref do ahead="$(git rev-list -count origin/HEAD..$ref)" after="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$пеш" "$пас" анҷом | сутуни -t tb/cruft-extra-tips 2 96 tb/for-har-ref—истисно кардани 16 96 tb/roaring-bitmaps 47 3
  • Опсияи "-porcelain" ба фармони "git fetch" илова карда шуд, вақте ки муайян карда мешавад, натиҷа дар формати " тавлид мешавад. ", хондан камтар, аммо барои таҳлили скриптҳо қулайтар аст.
  • Танзимоти "fetch.hideRefs" илова карда шуд, ки ба шумо имкон медиҳад, ки амалиёти "git fetch" -ро тавассути пинҳон кардани баъзе истинодҳо дар анбори маҳаллӣ дар марҳилаи тафтиши фиристодани маҷмӯи пурраи объектҳо, ки аз ҷониби сервер фиристодани вақтро сарфа мекунад, суръат бахшед. маҳдуд кардани чек танҳо ба серверҳое, ки маълумот мустақиман аз онҳо гирифта мешавад. Масалан, ҳангоми гузаронидани санҷиш дар системае, ки дорои миқдори зиёди истинодҳои берунии пайгирӣшуда мебошад, ба истиснои ҳамаи истинодҳо ба сервери мавриди ҳадаф $remote иҷрои амалиёти git fetch-ро аз 20 дақиқа то 30 сония коҳиш дод. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Фармони "git fsck" имкон медиҳад, ки фасод, риояи маблағи санҷиш ва дурустии арзишҳоро дар харитаҳои дастрас ва индексҳои баръакс тафтиш кунад.
  • Фармони "git clone --local" ҳоло ҳангоми кӯшиши нусхабардорӣ аз анбори дорои истинодҳои рамзӣ дар дохили $GIT_DIR хато нишон медиҳад.

Манбаъ: opennet.ru

Илова Эзоҳ