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

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

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

  • Даступны пачынаючы з выпуску 1.18 новы рэжым пераносу набору коммітаў "git rebase -rebase-merges" замяніў сабой старую опцыю "-preserve-merges", якая цяпер пазначаная як састарэлая. Аперацыя «git rebase» ужываецца для замены серыі коммітаў на новы базавы коміт, напрыклад, для зруху асобнай галіны, у якой развіваецца нейкая новая магчымасць, да актуальнага стану master-галінкі, улучальнай выпраўленні, дададзеныя пасля адгалінавання:

    o - o - o (my-feature)

    /

    o - o - o - o (master)

    o - o - o (my-feature)

    /

    o - o - o - o (master)

    Для захавання структуры галінавання ў пераноснай галінцы раней магла прымяняцца опцыя "-preserve-merges", якая пры запуску ў інтэрактыўным рэжыме (git rebase -i -preserve-merges) дазваляла рэдагаваць гісторыю коммітаў, але не гарантавала поўнае захаванне структуры рэпазітара. Які прыйшоў на змену рэжым «-rebase-merges» дазваляе захаваць структуру змен у пераноснай галінцы, падаючы пры гэтым поўны набор інтэрактыўных аперацый, уключаючы выдаленне, перагрупоўку і перайменаванне комітаў.

    Напрыклад, "-rebase-merges" дазваляе перазаліць коміты з асобнай галіны на навейшую master-галінку, захаваўшы пры гэтым структуру галінавання ў пераноснай галінцы, і занесці на ходу некаторыя змены ў нататкі да коммітаў.

  • Дададзена падтрымка стварэння новага адгалінавання на аснове выніку вызначэння базы зліцця двух іншых галінак (merge base, прывязка да агульнага продка) пры дапамозе канструкцый "git branch new A…B» і «git checkout -b new A…B», у якіх «A …B» мае на ўвазе вызначэнне базы зліцця паміж двума паказанымі комітамі, па аналогіі з тым, як «git checkout A…B» ссоўвае HEAD на базавы коміт і «diff A…B» паказвае змены паміж коммітам «B» і агульным з коммітам «А »продкам.

    Напрыклад, пры працы над асобнай галінкай my-feature прапанаваную магчымасць можна выкарыстоўваць калі патрабуецца пачаць з іншай галінкі, напрыклад, з таго ж месца ў master-галінцы, з якога была вынятая галінка my-feature. Раней для гэтага патрабавалася ўручную вывучыць лог змен, што стварала нязручнасць пры наяўнасці вялікай гісторыі змен, затым выканаць "git merge-base master my-feature" для вылічэння хэша базы зліццяў паміж галінкамі master і my-feature і стварыць новую галінку адносна агульнага продка. git branch my-other-feature хэш». У Git 2.22 для стварэння галінкі адносна базы зліцця двух іншых галінак можна выкарыстоўваць сінтаксіс "git branch my-other-feature A…B";

  • Дададзена опцыя "git branch -show-current" для адлюстравання імя галінкі, атрыманай пры выкананні аперацыі checkout;
  • Дададзена опцыя "git checkout -no-overlay - dir", якая дазваляе пры выкананні аперацыі checkout прывесці змесціва каталога dir да выгляду, цалкам які адпавядае стану master-галінкі. Напрыклад, калі ў лакальнай копіі каталога dir маецца файл, які адсутнічае ў master-галінцы, то па змаўчанні пры выкананні "git checkout master - dir" ён будзе пакінуты, а пры ўказанні опцыі "-no-overlay" выдалены;
  • У камандзе "git diff" задзейнічаны ўніверсальны API для разбору опцый, што дазволіла ўніфікаваць апрацоўку опцый з іншымі ўтылітамі git. Напрыклад, у "git diff" для ўсіх опцый зараз даступныя і іх антаганісты ("-function-context" і "-no-function-context");
  • Дададзена магчымасць фільтрацыі пры вывадзе «git log» прымацаваных да комітаў пашыраных пазнак («trailer» — дадатковыя інфармацыйныя сцягі, такія як Signed-off-by і Co-authored-by). Магчымая фільтраванне метак як па ключы, так і па значэнні, напрыклад:
    "git log -pretty="%(trailers:key=Reviewed-by,valueonly)";

  • Дададзены новы механізм трасіроўкі Trace2, які прапануе больш гнуткі і структураваны фармат вываду. Trace2 дазваляе збіраць тэлеметрыю аб выкананых аперацыях і дадзеных аб прадукцыйнасці для больш дэталёвага аналізу і адладкі (апрацоўшчык прызначаецца карыстачом, ніякія дадзеныя не адпраўляюцца па-за);
  • Зроблена больш чытэльнай справаздача «git bisect», у якой зараз больш навочна вылучаюцца праблемныя коміты і выводзяцца зводная статыстыка па зменах для кожнага файла (на ўзроўні ліку змененых радкоў);
  • Перапрацавана эўрыстыка вызначэння перайменаванняў каталогаў з мэтай выключэння ілжывай усталёўкі пазнак перайменавання. Пры наяўнасці сумневаў падобныя каталогі зараз пазначаюцца канфліктуючымі;
  • Забяспечана выснова папярэджання пры спробе ўсталёўкі тэга на іншы тэг, што, як правіла, здзяйсняецца па памылцы і можа прывесці да ўсталёўкі пазнакі не на той коміт (напрыклад, канструкцыя выгляду git tag -f -m updated message my-tag1 my- tag2″ прывядзе да стварэння тэга на стары тэг, у той час як распрацоўшчык разлічваў, што новы тэг будзе ўсталяваны на коміт, на які паказвае стары тэг);
  • Уключана генерацыя для рэпазітараў бітавых карт (дыскавая структура "reachability bitmaps"), якія захоўваюць дадзеныя аб наборах аб'ектаў, даступных для кожнага коммита, і якія дазваляюць хутка вызначыць наяўнасць базавага аб'екта. Указаная структура прыкметна скарачае час выканання аперацый вымання дадзеных (git fetch).

Крыніца: opennet.ru

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