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

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

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

  • Даведзены да гатоўнасці да паўсюднага выкарыстання механізм частковых індэксаў (sparse index), якія ахопліваюць толькі частку рэпазітара. Частковыя індэксы дазваляюць павысіць прадукцыйнасць і зэканоміць месца ў рэпазітарах, у якіх выконваюцца аперацыі частковага кланавання (sparse-checkout) або ажыццяўляецца праца з няпоўнай копіяй рэпазітара. У новым выпуску завершана праца па інтэграцыі частковых індэксаў у каманды "git show", "git sparse-checkout" і "git stash". Найбольш прыкметны выйгрыш у прадукцыйнасці ад выкарыстання частковых індэксаў назіраецца ў камандзе "git stash", хуткасць выканання якой у некаторых сітуацыях узрасла на 80%.
  • Рэалізаваны новы механізм "cruft packs" для пакавання недасяжных аб'ектаў (unreachable), на якія ў рэпазітары адсутнічаюць спасылкі (не спасылаюцца галінкі ці тэгі). Недасягальныя аб'екты выдаляюцца зборшчыкам смецця, але да выдалення пэўны час застаюцца ў рэпазітары для выключэння станаў гонкі. Для адсочвання перыяду знаходжання недасяжных аб'ектаў неабходна прывязка да іх пазнак з часам змены падобных аб'ектаў, што не дазваляе захоўваць іх у адным pack-файле, у якім усе аб'екты маюць агульны час змены. Раней ужывальнае захаванне кожнага аб'екта ў асобным файле прыводзіла да праблем пры наяўнасці вялікай колькасці свежых недасяжных аб'ектаў, яшчэ не якія падпадаюць пад выдаленне. Прапанаваны механізм "cruft packs" дазваляе захоўваць усе недасяжныя аб'екты ў адным pack-файле, а дадзеныя аб часе мадыфікацыі кожнага аб'екта адлюстроўваць у асобнай табліцы, якая захоўваецца ў файле з пашырэннем ". mtimes".
  • Для Windows і macOS рэалізаваны ўбудаваны механізм адсочвання змен у файлавай сістэме, які дазваляе абыйсціся без перабору ўсяго працоўнага каталога пры выкананні такіх аперацый, як "git status". Раней для адсочвання змен праз hook-і маглі падлучацца вонкавыя ўтыліты адсочвання змен у ФС, такія як Watchman, але гэта патрабавала ўсталёўкі дадатковых праграм і налады. Цяпер паказаная функцыянальнасць убудавана і можа быць уключаная камандай "git config core.fsmonitor true".
  • У камандзе «git sparse-checkout» абвешчана састарэлай падтрымка альтэрнатыўнага рэжыму «cone» метаду вызначэння шаблонаў для частковага кланавання, які дазваляе пры вызначэнні часткі рэпазітара, якая падпадае пад аперацыю кланавання, пералічваць асобныя файлы з выкарыстаннем сінтаксісу «.gitignore», што не дазваляе выкарыстоўваць для аптымізацыі. частковыя азначнікі.
  • Падвышаная гнуткасць налады выкліку fsync() для скіду змен на дыск. У параметр «core.fsyncMethod» дададзеная падтрымка стратэгіі сінхранізацыі «batch», якая дазваляе паскорыць працу пры запісе вялікай колькасці асобных файлаў за кошт назапашвання змен у кэшы зваротнага запісу, які скідаецца адным выклікам fsync(). Праведзены тэст, у выніку якога ў камандай "git add" было дададзена 500 файлаў, пры ўключэнні новага рэжыму быў выкананы за 0.15 секунд, у той час як пры выкліку fsync() для кожнага файла запатрабавалася 1.88 секунд, а без выкарыстання fsync - 0.06 секунд. .
  • У каманды абыходу галінак, падобныя "git log" і "git rev-list", дададзеная опцыя "-since-as-filter=X", якая дазваляе адсеяць інфармацыю аб комітах, час стварэння якіх старэйшыя за "X". У адрозненне ад опцыі «-since» новая каманда рэалізаваная ў выглядзе фільтра, які не спыняе перабор пасля першага комміта, старэй за зададзены час.
  • У камандзе "git remote" пры ўказанні сцяга "-v" забяспечаны вывад інфармацыі аб частковых клонах рэпазітара.
  • Дададзена настройка "transfer.credentialsInUrl", якая можа прымаць значэнні "warn", "die" і "allow". У выпадку ўказання ў параметры «remote. .url» уліковых дадзеных адкрытым тэкстам спроба выканання аперацый «fetch» ​​або «push» будзе завершана памылкай, калі настройка «transfer.credentialsInUrl» прымае значэнне «die», або папярэджаннем, калі ўсталявана значэнне «warn».
  • Па змаўчанні задзейнічана новая рэалізацыя інтэрактыўнага рэжыму каманды "git add -i", перапісаная з Perl на Сі.

Крыніца: opennet.ru

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