Даступная сістэма кіравання зыходнымі тэкстамі Git 2.41

Пасля трох месяцаў распрацоўкі апублікаваны выпуск размеркаванай сістэмы кіравання зыходнымі тэкстамі Git 2.41. Git з'яўляецца адной з самых папулярных, надзейных і высокапрадукцыйных сістэм кіравання версіямі, якая прадстаўляе гнуткія сродкі нелінейнай распрацоўкі, якія базуюцца на адгалінаванні і зліцці галінак. Для забеспячэння цэласнасці гісторыі і ўстойлівасці да змен «заднім лікам» выкарыстоўваюцца няяўнае хэшаванне ўсёй папярэдняй гісторыі ў кожным коміце, таксама магчыма пасведчанне лічбавымі подпісамі распрацоўшчыкаў асобных тэгаў і коммітаў.

У параўнанні з мінулым выпускам у новую версію прынята 542 змены, падрыхтаваныя пры ўдзеле 95 распрацоўшчыкаў, з якіх 29 упершыню прынялі ўдзел у распрацоўцы. Асноўныя навіны:

  • Палепшана апрацоўка недасяжных аб'ектаў (unreachable), на якія ў рэпазітары адсутнічаюць спасылкі (не спасылаюцца галінкі ці тэгі). Недасягальныя аб'екты выдаляюцца зборшчыкам смецця, але да выдалення пэўны час застаюцца ў рэпазітары для выключэння станаў гонкі. Для адсочвання перыяду знаходжання недасяжных аб'ектаў неабходна прывязка да іх пазнак з часам змены падобных аб'ектаў, што не дазваляе захоўваць іх у адным pack-файле, у якім усе аб'екты маюць агульны час змены. Раней кожны недасяжны аб'ект захоўваўся ў асобным файле, што прыводзіла да праблем пры наяўнасці вялікай колькасці свежых недасяжных аб'ектаў, якія яшчэ не падпадаюць пад выдаленне. У новым выпуску для пакавання недасяжных аб'ектаў па змаўчанні задзейнічаны механізм "cruft packs", які дазваляе захоўваць усе недасягальныя аб'екты ў адным pack-файле, а дадзеныя аб часе мадыфікацыі кожнага аб'екта адлюстроўваць у асобнай табліцы, якая захоўваецца ў файле з пашырэннем ". mtimes" і якая злучаецца пры дапамозе азначніка.
    Даступная сістэма кіравання зыходнымі тэкстамі Git 2.41
  • Уключана па змаўчанні вядзенне на дыску зваротнага азначніка (revindex) для pack-файлаў. Пры тэставанні на рэпазітары torvalds/linux ужыванне зваротнага азначніка дазволіла паскорыць рэсурсаёмістыя аперацыі "git push" у 1.49 разу, а простыя аперацыі, такія як вылічэнне памеру аднаго аб'екта пры дапамозе "git cat-file -batch='%(objectsize:disk)'" у 77 раз. Файлы (".rev") са зваротным азначнікам будуць захаваныя ўсярэдзіне рэпазітараў у каталогу ".git/objects/pack".

    Нагадаем, што Git захоўвае ўсе дадзеныя ў форме аб'ектаў, якія размяшчаюцца ў асобных файлах. ідэнтыфікатару аб'екта вельмі хутка вызначыць зрушэнне ў pack-файле, па якім захоўваецца дадзены аб'ект.

    Уключаны ў новым выпуску зваротны індэкс накіраваны на аптымізацыю працэсу вызначэння ідэнтыфікатара аб'екта па інфармацыі аб размяшчэнні аб'екта ў pack-файле. Раней такое пераўтварэнне выконвалася на ляту падчас разбору pack-файла і захоўвалася толькі ў памяці, што не дазваляла паўторна выкарыстоўваць падобныя азначнікі і змушала генераваць азначнік кожны раз. Аперацыя пабудовы азначніка зводзіцца да пабудовы масіва з пар «аб'ект-пазіцыя» і яго сартаванню па пазіцыі, што можа займаць шмат часу для вялікіх pack-файлаў.

    Напрыклад, аперацыя вываду змесціва аб'ектаў, у якой выкарыстоўваецца прамы індэкс, выконвалася ў 62 разы хутчэй, чым аперацыя паказу памеру аб'ектаў, для якой дадзеныя аб сувязі пазіцыі з аб'ектам не індэксаваліся. Пасля выкарыстання зваротнага азначніка паказаныя аперацыі сталі займаць прыкладна аднолькавы час. Зваротныя азначнікі таксама дазваляюць паскорыць аперацыі адпраўкі аб'ектаў пры выкананні каманд fetch і push за кошт прамой перадачы ўжо гатовых дадзеных з дыска.

    Даступная сістэма кіравання зыходнымі тэкстамі Git 2.41
  • У пратакол "credential helper", які ўжываецца для перадачы ўліковых дадзеных пры звароты да рэпазітараў з абмежаваным доступам, дададзеная падтрымка перадачы загалоўкаў WWW-Authenticate паміж апрацоўшчыкам уліковых дадзеных і сэрвісам, у якім вырабляецца аўтэнтыфікацыя. Падтрымка загалоўка WWW-Authenticate дазваляе перадаваць scope-параметры OAuth для больш грануляванага падзелу доступу карыстача да рэпазітараў і размежаванні абласцей, даступных для запытаў.
  • У каманду for-each-ref дададзена опцыя фарматавання «%(ahead-behind: )», якая дазваляе зараз атрымаць звесткі пра колькасць комітаў, якія прысутнічаюць або адсутнічаюць у пэўнай галінцы, адносна іншай галінкі (на колькі адна галінка адстае або апярэджвае іншую на ўзроўні комітаў). Раней для атрымання падобнай інфармацыі патрабавалася выканаць дзве асобныя каманды: "git rev-list -count main..my-feature" для атрымання колькасці ўнікальных для галіны комітаў і "git rev-list -count my-feature..main" для атрымання колькасці адсутных коммітаў. Цяпер падобныя вылічэнні можна звесці да адной каманды, што спрашчае напісанне апрацоўшчыкаў і скарачае час выканання. Напрыклад для паказу не якія прайшлі зліцця галінак і адзнакі адставання ці апярэджанні іх асноўнай галінкі можна выкарыстаць аднарадкоўнік: $ re-s/heads/t | column замест раней выкарыстанага скрыпту, які выконваецца ў 2 разоў больш павольна: \ refs/heads/tb | while read ref do ahead="$(git rev-list - count origin/HEAD..$ref)" behind="$(git rev-list - count $ref..origin/HEAD)" printf "%s %d %d\n" column -t tb/cruft-extra-tips 96 16 tb/for-each-ref-exclude 96 47 tb/roaring-bitmaps 3 17
  • У каманду "git fetch" дададзена опцыя "-porcelain", пры ўказанні якой фармуецца выснова ў фармаце " », меней чытэльны, але зручнейшы для разбору ў скрыптах.
  • Дададзена настройка «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

Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы 🔥 Купіць надзейны хостынг для сайтаў з абаронай ад DDoS, VPS VDS серверы | ProHoster