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

Прадстаўлены рэліз размеркаванай сістэмы кіравання зыходнымі тэкстамі Git 2.56. Код Git распаўсюджваецца пад ліцэнзіяй GPLv2+. У параўнанні з мінулым выпускам у новую версію прынята 748 змен, падрыхтаваных пры ўдзеле 104 распрацоўшчыкаў, 39 з якіх упершыню прынялі ўдзел у распрацоўцы Git. Асноўныя навіны (1, 2, 3):

  • Дададзены рэжым "git add -resolved" для дазволу канфліктаў пры зліцці галінак, які правярае файлы на наяўнасць маркераў канфлікту і пры выяўленні маркера хоць бы ў адным файле выдае памылку, не індэксуе ніводны з файлаў і паказвае спіс файлаў патрабавальных выпраўленні. У адрозненне ад каманды "git add -update" у новым рэжыме апрацоўваюцца толькі файлы, якія знаходзяцца ў стане канфлікту, а не звязаныя з канфліктам змененыя файлы ігнаруюцца, што дазваляе бяспечна завяршаць зліццё галінак, нават калі ў працоўным каталогу знаходзяцца іншыя незавершаныя праўкі (каманда "git add -update"). каталогу).
  • Значна паскорана праца з вялікімі рэпазітарамі, за кошт аптымізацыі алгарытму пошуку апошніх агульных комітаў пры зліцці галінак і параўнанні коммітаў. У працэсе працы зараз улічваюцца коміты, якія належаць выключна адной з галінак, што дазваляе спыніць сканаванне адразу пасля выяўлення ўсіх магчымых агульных продкаў, не марнуючы час на далейшы перабор гісторыі змен. У адным з пратэставаных рэпазітараў хуткасць пошуку вырасла ў сярэднім у 20 разоў, а ў іншым паскарэнне дасягала 70 разоў. Пры выкананні каманды "git merge-base -all v4.8 v4.9" у рэпазітары з ядром Linux колькасць крокаў абыходу паменшылася са 167 тысяч да 3.8 тысяч.
  • Для сервернага ўжывання адаптаваны рэжым перапакоўкі "-path-walk", які дазваляе ствараць больш кампактныя pack-файлы за кошт групоўкі аб'ектаў па іх шляху ў дрэве каталогаў (напрыклад, для рэпазітара Fluent UI выкарыстанне "-path-walk" дазволіла паменшыць памер pack-файла з 558 МБ да 164). У новай версіі рэалізавана магчымасць выкарыстання рэжыму «-path-walk» сумесна з бітавымі картамі дасяжнасці (reachability bitmap) і дэльта-астравамі (delta island), якія ўжываюцца git-хостынгамі для паскарэння працы і ізаляцыі форкаў ад асноўнага рэпазітара.
  • Ухіленыя вузкія месцы, якія прыводзілі да залішніх вылічэнняў у вялікіх рэпазітарах: прыбраныя лішнія праверкі стану файлаў пры запісе ў reftable; выключана паўторнае сканіраванне спісу пры кожнай устаўцы новага pack-файла; паскораны аперацыі з reftable, у якіх назапасілася шмат запісаў аб выдаленні; аптымізаваная праца "git diff" пры ўказанні абмежаванняў па файлавых шляхах. Пасля занясення аптымізацый праца з reftable пры вялікай колькасці выдаленняў паскорылася ў 65 раз (з 13 секунд да 0.2 секунды), а выкананне праблемнай каманды "git diff" у рэпазітары Chromium з 500000 элементамі ў азначніку стала займаць 0.07 секунд замест 8 хвілін.
  • У эксперыментальную каманду "git history", якая прадстаўляе магчымасці для перазапісу гісторыі змен, дададзена аперацыя "git history drop" для выдалення абранага коміта з аўтаматычным прымацаваннем яго нашчадкаў да бацькоўскага коміта.
  • Дададзена каманда «git branch -delete-merged 'origin/*' 'topic-*'» для бяспечнага выдалення груп лакальных галінак, змены з якіх ужо перададзены ў вонкавы рэпазітар. Для фільтрацыі галінак і рэпазітароў дапушчаецца выкарыстанне масак. Для аналізу прэтэндэнтаў на выдаленне, без фактычнага выканання аперацыі, можна выкарыстоўваць сцяг "-dry-run".
  • Дададзена каманда "git refs create|update|delete|rename", у якой аб'яднаны нізкаўзроўневыя аперацыі для стварэння, выдаленні, перайменавання і абнаўленні спасылак.
  • У каманду "git bisect run" дададзена опцыя "-reset-when-found=[ ]», якая аўтаматычна вяртае рэпазітар у стан да пачатку пошуку або пакідае актыўным праблемны коміт, без неабходнасці асобнага запуску каманды «git bisect reset».
  • У каманду "git replay" дададзены сцяг "-linearize" для выкарыстання плоскай тапалогіі зліцця, па аналогіі з "git rebase -no-rebase-merges", але без звароту да працоўнага дрэва.
  • У камандзе "git log -follow" рэалізавана адсочванне перайменавання файлаў у нелінейнай гісторыі змен, напрыклад, пры зліцці падветак. Шлях да файла зараз фіксуецца асобна для кожнага бацькоўскага комміта, што робіць вынік незалежным ад парадку абыходу гісторыі коммітаў.
  • Дададзена магчымасць ужывання каманды "git repack -a -filter=blob:limit=1m -drop-filtered" для выдалення вялікіх blob-аб'ектаў, загружаных на лета (on demand) з вонкавага рэпазітара і не выкарыстоўваных у бягучым азначніку. Пры звароце да гэтых аб'ектаў у далейшым яны будуць аўтаматычна паўторна загружаны.
  • У камандзе «git log —graph» для графаў з некалькімі незалежнымі каранямі рэалізавана даданне водступаў для нагляднага аддзялення незвязаных комітаў.
  • Забяспечана выяўленне тыпавых памылак друку, такіх як указанне "git push origin/main" замест "git push origin main" або "git branch -set-upstream-to origin main" замест "git branch -set-upstream-to = origin/main", і выснова падказкі па выкарыстанні карэктнага варыянту.

Крыніца: opennet.ru

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