Git 2.37 source control release

Ang paglabas ng distributed source control system na Git 2.37 ay inihayag. 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, 395 na pagbabago ang pinagtibay sa bagong bersyon, na inihanda sa pakikilahok ng 75 na mga developer, kung saan 20 ang nakibahagi sa pag-unlad sa unang pagkakataon. Mga pangunahing inobasyon:

  • Ang mekanismo ng mga partial index (sparse index), na sumasaklaw lamang sa bahagi ng repository, ay inihanda na para sa malawakang paggamit. Maaaring mapabuti ng mga bahagyang index ang pagganap at makatipid ng espasyo sa mga repositoryo na nagsasagawa ng mga operasyon ng partial cloning (sparse-checkout) o gumagana sa isang hindi kumpletong kopya ng repositoryo. Kinukumpleto ng bagong release ang pagsasama ng mga bahagyang index sa git show, git sparse-checkout, at git stash command. Ang pinaka-kapansin-pansin na benepisyo sa pagganap mula sa paggamit ng mga bahagyang index ay makikita sa git stash command, na nakakita ng 80% na pagtaas sa bilis ng pagpapatupad sa ilang mga sitwasyon.
  • Ang isang bagong mekanismo ng "cruft pack" ay ipinatupad para sa pag-iimpake ng mga hindi maabot na bagay na hindi na-reference sa repositoryo (hindi na-refer 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. Dati, ang pag-save ng bawat bagay sa isang hiwalay na file ay humantong sa mga problema kapag mayroong isang malaking bilang ng mga bago, hindi maabot na mga bagay na hindi pa karapat-dapat para sa pagtanggal. Ang iminungkahing 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 nakaimbak sa isang file na may extension na ".mtimes".
  • Para sa Windows at macOS, mayroong built-in na mekanismo para sa pagsubaybay sa mga pagbabago sa file system, na nagbibigay-daan sa iyong maiwasan ang pag-ulit sa buong gumaganang direktoryo kapag nagsasagawa ng mga operasyon tulad ng "git status". Dati, upang subaybayan ang mga pagbabago, ang mga panlabas na kagamitan para sa pagsubaybay sa mga pagbabago sa FS, tulad ng Watchman, ay maaaring ikonekta sa pamamagitan ng mga kawit, ngunit kinakailangan nito ang pag-install ng mga karagdagang programa at pagsasaayos. Ngayon ang tinukoy na pag-andar ay built-in at maaaring paganahin gamit ang command na "git config core.fsmonitor true".
  • Sa command na "git sparse-checkout", ang suporta para sa isang alternatibo sa mode na "β€”cone", ang paraan ng pagtukoy ng mga template para sa bahagyang pag-clone, ay idineklara na hindi na ginagamit, na nagpapahintulot, kapag tinutukoy ang bahagi ng repositoryo na napapailalim sa ang cloning operation, upang ilista ang mga indibidwal na file gamit ang ".gitignore" syntax, na hindi pinapayagan ang paggamit para sa pag-optimize ng mga bahagyang index.
  • Nadagdagang flexibility sa pag-configure ng fsync() na tawag para i-flush ang mga pagbabago sa disk. Ang suporta para sa diskarte sa pag-synchronize ng "batch" ay idinagdag sa parameter na "core.fsyncMethod", na nagbibigay-daan sa pagpapabilis ng trabaho kapag nagsusulat ng malaking bilang ng mga indibidwal na file sa pamamagitan ng pag-iipon ng mga pagbabago sa writeback cache, na ni-reset ng isang fsync() tawag. Ang pagsubok, na nagresulta sa 500 mga file na idinagdag gamit ang "git add" na utos, ay nakumpleto sa 0.15 segundo kapag ang bagong mode ay pinagana, habang ang pagtawag sa fsync() ay tumagal ng 1.88 segundo para sa bawat file, at nang hindi gumagamit ng fsync - 0.06 segundo .
  • Ang mga branch traversal command tulad ng "git log" at "git rev-list" ay mayroon na ngayong opsyon na "-since-as-filter=X" na nagbibigay-daan sa iyong i-filter ang impormasyon tungkol sa mga commit na mas luma sa "X". Hindi tulad ng opsyong "β€”since", ang bagong command ay ipinatupad bilang isang filter na hindi humihinto sa paghahanap pagkatapos ng unang commit na mas luma kaysa sa tinukoy na oras.
  • Sa command na "git remote", kapag tinukoy ang flag na "-v", ang impormasyon tungkol sa mga partial clone ng repository ay ipinapakita.
  • Idinagdag ang setting na "transfer.credentialsInUrl," na maaaring kunin ang mga value na "warning", "die" at "allow". Kung tinukoy sa parameter na "remote. .url" na mga kredensyal ng plaintext, ang pagtatangkang magsagawa ng "fetch" o "push" na operasyon ay mabibigo nang may error kung ang setting na "transfer.credentialsInUrl" ay nakatakda sa "mamatay", o isang babala kung nakatakda sa "warning".
  • Bilang default, ang bagong pagpapatupad ng interactive na mode ng command na "git add -i", na muling isinulat mula Perl hanggang C, ay pinagana.

Pinagmulan: opennet.ru

Magdagdag ng komento