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

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

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

  • Ажыццёўлены пераход па змаўчанні на другую версію камунікацыйнага пратаколу Git, які выкарыстоўваецца пры аддаленым падключэнні кліента да Git-сервера. Другая версія пратакола характэрна прадастаўленнем магчымасці фільтрацыі галінак і тэгаў на боку сервера з аддачай кліенту скарочанага спісу спасылак. Раней пры выкананні любой каманды вымання кліенту заўсёды адпраўляўся поўны спіс спасылак ва ўсім рэпазітары, нават калі кліент абнаўляў толькі адну галінку або правяраў актуальнасць сваёй копіі рэпазітара. Іншым прыкметным навінай з'яўляецца магчымасць дадання ў пратакол новых магчымасцяў па меры з'яўлення ў інструментары новай функцыянальнасці. Код кліента застаецца сумяшчальным са старым пратаколам і можа працягваць працаваць як з новымі, так і са старымі серверамі, аўтаматычна адкочваючыся на першую версію, калі сервер не падтрымлівае другую.
  • У каманду "git config" дададзена опцыя "-show-scope" спрашчаючая выяўленне месца, у якім вызначаны тыя ці іншыя налады. Git дазваляе вызначаць налады ў розных месцах: у рэпазітары (.git/info/config), у каталогу карыстальніка (~/.gitconfig), у агульнасістэмным файле канфігурацыі (/etc/gitconfig), а таксама праз опцыі каманднага радка і зменныя асяроддзі. Пры выкананні "git config" досыць цяжка зразумець дзе менавіта вызначана шуканая налада. Для рашэння дадзенай задачы была даступная опцыя "-show-origin", але яна толькі паказвае шлях да файла, у якім вызначана налада, што карысна пры намеры адрэдагаваць файл, але не дапамагае, калі патрабуецца змяніць значэнне праз "git config" пры дапамозе опцый "-system", "-global" ці "-local". Новая опцыя "-show-scope" адлюстроўвае кантэкст вызначэння зменных і можа прымяняцца сумесна з -show-origin":

    $ git -list -show-scope -show-origin
    Global file:/home/user/.gitconfig diff.interhunkcontext=1
    Global file:/home/user/.gitconfig push.default=current
    […] local file:.git/config branch.master.remote=origin
    local file:.git/config branch.master.merge=refs/heads/master

    $ git config -show-scope -get-regexp 'diff.*'
    global diff.statgraphwidth 35
    local diff.colormoved plain

    $ git config -global -unset diff.statgraphwidth

  • У наладах прывязкі уліковых дадзеных дазволена выкарыстанне масак у URL. Любыя налады HTTP і ўліковыя дадзеныя ў Git могуць быць усталяваныя як для ўсіх злучэнняў (http.extraHeader, credential.helper), так і для злучэнняў у прывязцы да URL (credential.https://example.com.helper, credential.https: //example.com.helper). Да гэтага часу выкарыстанне масак, такіх як *.example.com, дапускалася толькі для налад HTTP, але не падтрымлівалася для прывязкі ўліковых дадзеных. У Git 2.26 дадзеныя адрозненні ўхіленыя і, напрыклад, для прывязкі імя карыстача да ўсіх паддаменаў зараз можна паказаць:

    [credential "https://*.example.com"]

    username = ttaylorr

  • Працягнута пашырэнне эксперыментальнай падтрымкі частковага кланавання (partial clones), якая дазваляе пераносіць толькі частку дадзеных і працаваць з няпоўнай копіяй рэпазітара. У новым выпуску дададзена новая каманда "git sparse-checkout add", якая дазваляе дадаваць асобныя дырэкторыі для прымянення аперацыі "checkout" толькі да часткі працоўнага дрэва, замест пераліку ўсіх падобных дырэкторый зараз праз каманду "git sparse-checkout set" (можна дадаваць па адной дырэкторыі, без паўторнага задання ўсяго спісу кожны раз).
    Напрыклад, для кланавання рэпазітара git/git без перадачы блобаў, абмежаванні праверкі толькі каранёвым каталогам працоўнай копіі і паасобнай пазнакай для вымання каталогаў «t» і «Documentation», можна паказаць:

    $ git clone -filter=blob:none -sparse [электронная пошта абаронена]:git/git.git

    $ cd git
    $ git sparse-checkout init-cone

    $ git sparse-checkout add t
    ....
    $ git sparse-checkout add Documentation
    ....
    $ git sparse-checkout list
    дакументацыя
    t

  • Прыкметна павялічана прадукцыйнасць каманды "git grep", якая прымяняецца для пошуку як у актуальным змесцівам рэпазітара, так і ў гістарычных рэвізіях. Для паскарэння пошуку дапушчалася сканаванне змесціва працоўнага дрэва з выкарыстаннем некалькіх струменяў («git grep -threads»), але пошук у гістарычных рэвізіях быў аднаструменным. Цяпер гэта абмежаванне знята за кошт рэалізацыі магчымасці распаралельвання аперацый чытання са сховішча аб'ектаў. Па змаўчанні лік струменяў усталёўваецца роўным ліку ядраў CPU, што ў большасці выпадкаў зараз не патрабуе відавочнага выстаўлення опцыі "threads".
  • Дададзена падтрымка аўтадапаўнення ўводу субкаманд, шляхоў, спасылак і іншых аргументаў каманды "git worktree", якая дазваляе працаваць з некалькімі працоўнымі копіямі рэпазітара.
  • Дададзена падтрымка яркіх кветак, для якіх маюцца ANSI escape-паслядоўнасці. Напрыклад, у наладах колераў падсвятлення "git config -color" або "git diff -color-moved" праз опцыю "-format" для ярка-блакітнага можна паказваць "%C(brightblue)".
  • Дададзена новая версія скрыпту fsmonitor-watchman, які забяспечвае інтэграцыю з механізмам Facebook Watchman для паскарэння адсочвання змены файлаў і з'яўленні новых файлаў. Пасля абнаўлення git патрабуецца замяніць hook у рэпазітары.
  • Дададзеныя аптымізацыі для паскарэння аперацый частковага кланавання (partial clones), злучаныя з ужываннем бітавых карт
    (bitmap machinery) для пазбягання поўнага перабору ўсіх аб'ектаў падчас фільтравання аддачы. Праверка на блобы (—filter=blob:none і —filter=blob:limit=n) пры частковым кланаванні зараз вырабляецца
    істотна хутчэй. GitHub абвясціў аб ужыванні патчаў з дадзенымі аптымізацыямі і эксперыментальнай падтрымцы частковага кланавання.

  • Каманда "git rebase" пераведзена на іншы бэкенд, які выкарыстоўвае па змаўчанні механізм 'merge' (раней выкарыстоўваўся для "rebase -i") замест 'patch+apply'. У некаторых дробязях бэкэнды адрозніваюцца, напрыклад, пасля працягу аперацыі пасля ўхілення канфлікту (git rebase -continue) новы бэкенд прапануе адрэдагаваць паведамленне комміта, а стары проста выкарыстаў старое паведамленне. Для вяртання старых паводзін можна выкарыстоўваць опцыю "-apply" або ўсталяваць зменную канфігурацыі 'rebase.backend' у значэнне 'apply'.
  • Прыклад апрацоўшчыка параметраў аўтэнтыфікацыі, зададзеных праз .netrc, прыведзены да выгляду, прыдатнага для выкарыстання са скрынкі.
  • Дададзена налада gpg.minTrustLevel для задання мінімальнага ўзроўню даверу для розных элементаў, якія выконваюць праверку лічбавага подпісу.
  • У "git rm" і "git stash" дададзена опцыя "-pathspec-from-file".
  • Прадоўжана ўдасканаленне тэставых набораў у рамках падрыхтоўкі да пераходу на алгарытм хэшавання SHA-2 замест SHA-1.

Крыніца: opennet.ru

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