Available ang Git 2.41 source control system

Pagkatapos ng tatlong buwan ng pag-develop, inilabas na ang distributed source control system na Git 2.41. Ang Git ay isa sa pinakasikat, maaasahan at may mataas na pagganap na mga sistema ng kontrol ng bersyon, na nagbibigay ng nababaluktot na non-linear na mga tool sa pagpapaunlad batay sa pagsasanga at pagsasama. Upang matiyak ang integridad ng kasaysayan at paglaban sa mga retroactive na pagbabago, ang implicit na pag-hash ng buong nakaraang kasaysayan ay ginagamit sa bawat commit; posible ring patunayan ang mga indibidwal na tag at commit gamit ang mga digital na lagda ng mga developer.

Kung ikukumpara sa nakaraang paglabas, ang bagong bersyon ay may kasamang 542 na pagbabago, na inihanda sa pakikilahok ng 95 mga developer, kung saan 29 ang nakibahagi sa pag-unlad sa unang pagkakataon. Mga pangunahing inobasyon:

  • Pinahusay na pangangasiwa ng mga bagay na hindi naaabot na hindi naka-reference sa repositoryo (hindi nire-reference ng mga sangay o tag). Ang mga hindi maabot na bagay ay dine-delete ng basurero, ngunit mananatili sa repositoryo para sa isang tiyak na oras bago sila matanggal upang maiwasan ang mga kundisyon ng lahi. Upang subaybayan ang panahon ng paglitaw ng mga hindi maabot na mga bagay, kinakailangan na mag-attach ng mga tag sa kanila na may oras ng pagbabago ng mga katulad na bagay, na hindi pinapayagan ang pag-iimbak ng mga ito sa isang pack file kung saan ang lahat ng mga bagay ay may karaniwang oras ng pagbabago. Noong nakaraan, ang bawat hindi maabot na bagay ay naka-imbak sa isang hiwalay na file, na humantong sa mga problema kapag mayroong isang malaking bilang ng mga sariwang hindi maabot na mga bagay na hindi pa karapat-dapat para sa pagtanggal. Sa bagong release, ang mekanismo ng "cruft pack" ay ginagamit bilang default para sa pag-iimpake ng mga hindi maabot na bagay, na nagbibigay-daan sa iyo upang iimbak ang lahat ng hindi maabot na mga bagay sa isang pack file, at ang data sa oras ng pagbabago ng bawat bagay ay makikita sa isang hiwalay na talahanayan, na nakaimbak. sa isang file na may extension na ".mtimes" at naka-link gamit ang isang index file na may extension na ".idx".
    Available ang Git 2.41 source control system
  • Ang pagpapanatili ng reverse index sa disk para sa mga pack file ay pinagana bilang default. Sa pagsubok sa torvalds/linux repository, ang paggamit ng reverse index ay naging posible upang mapabilis ang resource-intensive na "git push" na operasyon ng 1.49 beses, at mga simpleng operasyon tulad ng pagkalkula ng laki ng isang bagay gamit ang "git cat- file —batch='%(objectsize:disk)' "77 beses. Ang mga file (“.rev”) na may reverse index ay iimbak sa loob ng repositoryo sa “.git/objects/pack” na direktoryo.

    Alalahanin na ang Git ay nag-iimbak ng lahat ng data sa anyo ng mga bagay, na matatagpuan sa magkahiwalay na mga file. Upang madagdagan ang kahusayan ng pagtatrabaho sa repository, ang mga bagay ay karagdagan na inilalagay sa mga pack file, kung saan ang impormasyon ay ipinakita sa anyo ng isang stream ng mga bagay na sumusunod sa bawat isa (isang katulad na format ay ginagamit kapag naglilipat ng mga bagay na may git fetch at git push mga utos). Para sa bawat pack file, isang index file (.idx) ang ginawa, na nagbibigay-daan sa iyong mabilis na matukoy ang offset sa pack file kung saan iniimbak ang ibinigay na object gamit ang object identifier.

    Ang reverse index na kasama sa bagong release ay naglalayong i-optimize ang proseso ng pagtukoy ng object identifier mula sa impormasyon tungkol sa paglalagay ng object sa pack file. Dati, ang naturang conversion ay ginawa sa mabilisang pag-parse ng pack file at naka-imbak lamang sa memorya, na hindi pinapayagan ang mga katulad na index na muling magamit at pinilit ang index na mabuo sa bawat oras. Ang pagpapatakbo ng pagbuo ng isang index ay bumababa sa pagbuo ng isang hanay ng mga pares ng object-position at pag-uuri nito ayon sa posisyon, na maaaring tumagal ng mahabang panahon para sa malalaking pack file.

    Halimbawa, ang isang operasyon upang ipakita ang mga nilalaman ng mga bagay, na gumagamit ng isang direktang index, ay 62 beses na mas mabilis kaysa sa isang operasyon upang ipakita ang laki ng mga bagay, kung saan ang data ng posisyon-sa-bagay ay hindi na-index. Pagkatapos gamitin ang reverse index, ang mga operasyong ito ay nagsimulang tumagal nang humigit-kumulang sa parehong oras. Binibigyang-daan ka rin ng mga reverse index na pabilisin ang mga operasyon sa pagpapadala ng object kapag nagsasagawa ng mga fetch at push command sa pamamagitan ng direktang paglilipat ng handa na data mula sa disk.

    Available ang Git 2.41 source control system

  • Ang protocol na "katulong sa kredensyal", na ginagamit upang maglipat ng mga kredensyal kapag nag-a-access sa mga repositoryo na may limitadong pag-access, ay nagdagdag ng suporta para sa pagpasa ng mga header ng WWW-Authenticate sa pagitan ng tagapangasiwa ng kredensyal at ng serbisyo kung saan isinasagawa ang pagpapatotoo. Nagbibigay-daan sa iyo ang suporta para sa header ng WWW-Authenticate na ipasa ang mga parameter ng saklaw ng OAuth para sa isang mas butil na paghihiwalay ng access ng user sa mga repository at delimitation ng mga saklaw na available para sa mga kahilingan.
  • Idinagdag ang opsyon sa pag-format na "%(ahead-behind:" sa for-each-ref command: )", na nagbibigay-daan sa iyo na agad na makakuha ng impormasyon tungkol sa bilang ng mga commit na naroroon o wala sa isang partikular na branch, na may kaugnayan sa isa pang branch (kung magkano ang isang branch ay nasa likod o nauuna sa isa pa sa commit level). Dati, para makakuha ng ganoong impormasyon, kailangan mong magpatakbo ng dalawang magkahiwalay na command: “git rev-list —count main..my-feature” para makuha ang bilang ng mga commit na natatangi sa branch at “git rev-list —count my-feature ..pangunahing” para makuha ang nawawalang numerong commits. Ngayon ang mga naturang kalkulasyon ay maaaring bawasan sa isang solong utos, na pinapasimple ang pagsulat ng mga humahawak at binabawasan ang oras ng pagpapatupad. Halimbawa, upang ipakita ang mga sangay na hindi pa pinagsama at suriin kung sila ay nasa likod o nauuna sa pangunahing sangay, maaari kang gumamit ng one-liner: $ git for-each-ref —no-merged=origin/HEAD \ —format ='%(refname:short) %(ahead-behind :origin/HEAD)' \refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—ibukod ang 16 96 tb/roaring-bitmaps 47 3 sa halip na ang dating ginamit na script, na tumatakbo nang 17 beses na mas mabagal: $ git for-each-ref — format='%(refname:short)' —no-merged=origin/HEAD \ refs/heads/tb | habang nagbabasa ng ref do ahead="$(git rev-list -count origin/HEAD..$ref)" behind="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$ahead" "$behind" tapos na | column -t tb/cruft-extra-tips 2 96 tb/for-each-ref—ibukod ang 16 96 tb/roaring-bitmaps 47 3
  • Ang opsyon na "-porcelain" ay naidagdag sa "git fetch" na utos, kapag tinukoy, ang output ay nabuo sa format na " ", hindi gaanong nababasa, ngunit mas maginhawa para sa pag-parse sa mga script.
  • Idinagdag ang setting na "fetch.hideRefs", na nagbibigay-daan sa iyong pabilisin ang mga operasyon ng "git fetch" sa pamamagitan ng pagtatago ng ilan sa mga link sa lokal na repositoryo sa yugto ng pagsuri na ang server ay nagpadala ng isang buong hanay ng mga bagay, na nakakatipid ng oras sa pamamagitan ng nililimitahan lamang ang tseke sa mga server kung saan direktang kinukuha ang data. Halimbawa, kapag nagpapatakbo ng pagsubok sa isang system na may mga repositoryo na naglalaman ng malaking bilang ng mga sinusubaybayang panlabas na link, hindi kasama ang lahat ng link maliban sa mga naka-address sa target na server na $remote ay binawasan ang pagsasagawa ng git fetch operation mula 20 minuto hanggang 30 segundo. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Ang command na "git fsck" ay nagbibigay ng kakayahang suriin kung may katiwalian, pagsunod sa checksum, at kawastuhan ng mga halaga sa mga bitmap ng accessibility at reverse index.
  • Ang utos na "git clone --local" ay nagpapakita na ngayon ng isang error kapag sinusubukang kopyahin mula sa isang repositoryo na naglalaman ng mga symlink sa loob ng $GIT_DIR.

Pinagmulan: opennet.ru

Magdagdag ng komento