Git 2.39 source control release

Pagkatapos ng dalawang buwan ng pag-develop, inilabas na ang distributed source control system na Git 2.39. 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 483 na pagbabago, na inihanda kasama ang pakikilahok ng 86 na mga developer, kung saan 31 ang nakibahagi sa pag-unlad sa unang pagkakataon. Mga pangunahing inobasyon:

  • Ang command na "git shortlog", na idinisenyo upang magpakita ng mga buod na may mga istatistika mula sa kasaysayan ng mga pagbabago, ay nagdagdag ng opsyon na "-group" para sa arbitrary na pagpapangkat ng mga commit ayon sa mga field na hindi limitado sa may-akda o committer. Halimbawa, upang magpakita ng listahan ng mga developer na may impormasyon tungkol sa bilang ng mga pagbabago, na isinasaalang-alang ang mga katulong na binanggit sa field na "Co-authored-by", maaari mong gamitin ang command: git shortlog -ns --group=author - -group=trailer:co-authored-by

    Maaaring pagsama-samahin ang output ng shortlog gamit ang mga tagatukoy ng pag-format, at ang opsyong "--group" ay maaaring makabuluhang pasimplehin ang paggawa ng mga kumplikadong ulat at alisin ang pangangailangan para sa karagdagang mga utos sa pag-uuri. Halimbawa, upang lumikha ng isang ulat na may impormasyon tungkol sa kung gaano karaming mga commit para sa isang naibigay na release ang tinanggap sa bawat buwan, maaari mong tukuyin ang: git shortlog v2.38.0.. β€”date='format:%Y-%m' β€”group=' %cd' -s 2 2022-08 47 2022-09 405 2022-10 194 2022-11 5 2022-12 Dati, para magsagawa ng katulad na operasyon, kinakailangan na gumamit ng sort at uniq utilities: git log v2.38.0 .. β€”date='format:%Y -%m' β€”format='%cd' | uri | uniq -c

  • Ang mga kakayahan ng mekanismo ng "cruft pack", na idinisenyo para sa pag-iimpake ng mga bagay na hindi naaabot na hindi naka-reference sa repositoryo (hindi na-refer ng mga sangay o tag), ay pinalawak. 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. Ang mekanismo ng "cruft pack" ay nagbibigay-daan sa iyo na iimbak ang lahat ng hindi maabot na mga bagay sa isang pack file, at ipakita ang data sa oras ng pagbabago ng bawat bagay sa isang hiwalay na talahanayan, na naka-imbak sa isang hiwalay na file na may extension na ".mtimes", upang magawa nila. hindi magkakapatong sa kabuuang oras ng pagbabago.

    Ang haba ng oras na mananatili sa repositoryo ang mga hindi maabot na bagay bago sila aktwal na matanggal ay tinutukoy ng opsyong "β€”prune=" " Gayunpaman, habang ang pagkaantala bago ang pagtanggal ay isang medyo epektibo at praktikal na paraan upang maiwasan ang katiwalian sa repositoryo dahil sa mga kundisyon ng lahi, hindi ito 100% maaasahan. Upang gawing mas madali ang pagpapanumbalik ng nasirang repositoryo, ang bagong release ay nagbibigay ng kakayahang mag-save ng mga nawawalang bagay sa pamamagitan ng pagdaragdag ng opsyong "--expire-to" sa command na "git repack", na nagbibigay-daan sa iyong tukuyin ang isang file upang lumikha ng isang panlabas. kopya ng lahat ng tinanggal na bagay. Halimbawa, upang i-save ang mga hindi maabot na bagay na hindi nagbago sa huling 5 minuto sa backup.git file, maaari mong gamitin ang command: git repack --cruft --cruft-expiration=5.minutes.ago -d --expire -to=../backup.git

  • Malaking tumaas (hanggang 70%) ang bilis ng "git grep -cached" na operasyon kapag naghahanap sa mga lugar na gumagamit ng partial cloning (sparse-checkout) at kung saan mayroong mga partial index (sparse index). Noong nakaraan, kapag tinukoy ang pagpipiliang "-cached", ang paghahanap ay isinasagawa muna sa regular na index, at pagkatapos ay sa mga bahagyang, na humantong sa mga kapansin-pansin na pagkaantala kapag naghahanap sa malalaking repositoryo.
  • Ang pagpapatunay ng server sa pagkakaugnay ng mga bagong bagay bago sila ilagay sa imbakan sa panahon ng "git push" na operasyon ay pinabilis. Sa pamamagitan ng paglipat sa accounting para sa mga ipinahayag na link lamang kapag nagsusuri, sa isang pagsubok na repository na may 7 milyong mga link, kung saan 3% lamang ang sakop ng push operation, ang mga pag-optimize na ginawa ay nagpapahintulot na bawasan ang oras ng pagsusuri ng 4.5 beses.
  • Upang maprotektahan laban sa mga potensyal na integer overflows sa code, nililimitahan ng "git apply" na command ang maximum na laki ng mga patch na maaaring iproseso. Kung ang laki ng patch ay lumampas sa 1 GB, isang error ang ipapakita na ngayon.
  • Upang maprotektahan laban sa mga potensyal na kahinaan, ginawa ang mga pagbabago upang linisin ang hindi kinakailangang impormasyon mula sa mga header na itinakda kapag ginagamit ang h2h3 module na may opsyong GIT_TRACE_CURL=1 o GIT_CURL_VERBOSE=1 kasama ng HTTP/2.
  • Kapag nagsasagawa ng check out sa isang branch na isang simbolikong link sa isa pang branch, ipinapakita na ngayon ng command na "git symbolic-ref HEAD" ang pangalan ng target na branch sa halip na ang pangalan ng symlink.
  • Nagdagdag ng suporta para sa argumentong @{-1} sa opsyong β€œ--edit-description” (β€œgit branch β€”edit-description @{-1}”) para sa pag-edit ng paglalarawan ng isang nakaraang branch.
  • Idinagdag ang "git merge-tree --stdin" na utos upang makapasa ng isang listahan ng mga opsyon sa pamamagitan ng karaniwang input.
  • Sa mga network file system, ang fsmonitor handler, na sinusubaybayan ang mga pagbabago sa file system, ay hindi pinagana bilang default.

Pinagmulan: opennet.ru

Magdagdag ng komento