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

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

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

  • У каманду «git shortlog», прызначаную для адлюстравання зводак са статыстыкай з гісторыі змен, дададзена опцыя «—group» для адвольнай групоўкі комітаў па палях, якія не абмяжоўваюцца аўтарам ці камітэрам. Напрыклад, для паказу спісу распрацоўнікаў з інфармацыяй аб ліку змен, які ўлічвае памагатых, згаданых у поле «Co-authored-by», можна выкарыстаць каманду: git shortlog -ns

    Выснова shortlog можна агрэгаваць пры дапамозе спецыфікатараў фарматавання і опцыя «-group» дазваляе істотна спрасціць стварэнне складаных справаздач і пазбавіцца ад выкананні дадатковых каманд сартавання. Напрыклад, для стварэння справаздачы з інфармацыяй аб тым, колькі коммітаў для зададзенага рэлізу было прынята ў кожным месяцы, можна пазначыць: git shortlog v2.38.0.. —date='format:%Y-%m' —group='%cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Раней для выканання аналагічнай аперацыі запатрабавалася б прыцягненне ўтыліт sort і uniq: git log v2.38.0.. -%m' -format='%cd' | sort | uniq -c

  • Пашыраны магчымасці механізму «cruft packs», прызначанага для пакавання недасяжных аб'ектаў, на якія ў рэпазітары адсутнічаюць спасылкі (не спасылаюцца галінкі ці тэгі). Недасягальныя аб'екты выдаляюцца зборшчыкам смецця, але да выдалення пэўны час застаюцца ў рэпазітары для выключэння станаў гонкі. Механізм "cruft packs" дазваляе захоўваць усе недасягальныя аб'екты ў адным pack-файле, а дадзеныя аб часе мадыфікацыі кожнага аб'екта адлюстроўваць у асобнай табліцы, якая захоўваецца ў асобным файле з пашырэннем ". mtimes", што б яны не перасякаліся з агульным часам змены.

    Час знаходжання недасяжных аб'ектаў у рэпазітары перад фактычным выдаленнем вызначаецца опцыяй «—prune= ». Пры гэтым нягледзячы на ​​тое, што затрымка перад выдаленнем з'яўляецца дастаткова эфектыўным і практычным спосабам прадухілення пашкоджанні рэпазітара з-за стану гонкі, ён не з'яўляецца на 100% надзейным. Каб спрасціць аднаўленне пашкоджанага рэпазітара ў новым выпуску прадстаўлена магчымасць захавання адсутных аб'ектаў, для чаго ў каманду «git repack» дададзена опцыя «expire-to», якая дазваляе задаць файл для стварэння вонкавай копіі ўсіх выдаляных аб'ектаў. Напрыклад, для захавання ў файле backup.git недасягальных аб'ектаў, якія не мяняліся апошнія 5 хвілін, можна выкарыстоўваць каманду: git repack -cruft -cruft-expiration=5.minutes.ago -d -expire-to=../backup.git

  • Значна павялічана (да 70%) хуткасць выканання аперацыі "git grep-cached" пры пошуку ў абласцях, у якіх прымяняецца частковае кланаванне (sparse-checkout) і для якіх маюцца частковыя індэксы (sparse index). Раней пры ўказанні опцыі "-cached" спачатку ажыццяўляўся пошук у звычайным індэксе, а потым у частковых, што прыводзіла да ўзнікнення адчувальных затрымак пры пошуку ў вялікіх рэпазітарах.
  • Паскорана выкананне на серверы праверкі складнасці новых аб'ектаў перад іх змяшчэннем у рэпазітар пры выкананні аперацыі "git push". За кошт пераходу да ўліку пры праверцы толькі абвешчаных спасылак, у тэставым рэпазітары з 7 млн ​​спасылак з якіх толькі 3% ахоплены аперацыяй push унесеныя аптымізацыі дазволілі скараціць час праверкі ў 4.5 разы.
  • Для абароны ад патэнцыйных цэлалікіх перапаўненняў у кодзе ў камандзе "git apply" абмежаваны максімальны памер апрацоўваных патчаў. У выпадку, калі памер патча перавышае 1 ГБ зараз будзе выводзіцца памылка.
  • Для абароны ад патэнцыйных уразлівасцяў унесены змены для чысткі лішняй інфармацыі з загалоўкаў, якія выстаўляюцца пры выкарыстанні модуля h2h3 з опцыяй GIT_TRACE_CURL=1 або GIT_CURL_VERBOSE=1 разам з HTTP/2.
  • Пры выкананні аперацыі check out з галінкай, якая з'яўляецца сімвалічнай спасылак на іншую галіну, каманда "git symbolic-ref HEAD" зараз выводзіць назву мэтавай галінкі, а не імя сімвалічнай спасылкі.
  • Дададзена падтрымка аргументу @{-1} у опцыі "-edit-description" ("git branch -edit-description @{-1}") для рэдагавання апісання мінулай галіны.
  • Дададзена каманда "git merge-tree -stdin", якая дазваляе перадаць спіс параметраў праз стандартны ўваходны струмень.
  • На сеткавых файлавых сістэмах па змаўчанні адключаны апрацоўшчык fsmonitor, які адсочвае змены ў ФС.

Крыніца: opennet.ru

Дадаць каментар