Sistem kontrol sumber Git 2.41 sayogi

Saatos tilu bulan pangwangunan, sistem kontrol sumber anu disebarkeun Git 2.41 parantos dileupaskeun. Git mangrupikeun salah sahiji sistem kontrol versi anu pang populerna, dipercaya sareng berprestasi tinggi, nyayogikeun alat pangembangan non-linier anu fleksibel dumasar kana cabang sareng ngahiji. Pikeun mastikeun integritas sajarah sareng résistansi kana parobahan retroaktif, hashing implisit tina sakabéh sajarah saméméhna dianggo dina unggal komitmen; ogé mungkin pikeun ngajamin tag individu sareng komitmen sareng tanda tangan digital para pamekar.

Dibandingkeun sareng sékrési sateuacana, versi énggal kalebet 542 parobihan, disiapkeun sareng partisipasi 95 pamekar, dimana 29 mimitina nyandak bagian dina pangwangunan. Inovasi utama:

  • Ningkatkeun penanganan objék anu teu tiasa dihontal anu henteu dirujuk dina gudang (henteu dirujuk ku cabang atanapi tag). Objék anu teu tiasa dihontal dipupus ku tukang sampah, tapi tetep dina gudang pikeun sababaraha waktos sateuacan dihapus pikeun ngahindarkeun kaayaan balapan. Pikeun ngalacak periode lumangsungna objék unreachable, perlu pikeun ngagantelkeun tag ka aranjeunna kalayan waktu robah objék sarupa, nu teu ngidinan nyimpen aranjeunna dina hiji file pak nu sagala objék boga waktu robah umum. Saméméhna, unggal obyék unreachable disimpen dina file misah, nu ngakibatkeun masalah lamun aya sajumlah badag objék unreachable seger nu teu acan layak pikeun ngahapus. Dina sékrési énggal, mékanisme "cruft packs" dianggo sacara standar pikeun ngabungkus objék anu teu tiasa dihontal, anu ngamungkinkeun anjeun pikeun nyimpen sadaya objék anu teu tiasa dihontal dina hiji file pakét, sareng data ngeunaan waktos modifikasi unggal obyék ditingali dina méja anu misah, disimpen. dina file kalawan extension ".mtimes" na numbu maké file indéks jeung extension ".idx".
    Sistem kontrol sumber Git 2.41 sayogi
  • Ngajaga indéks sabalikna dina disk pikeun file pak diaktipkeun sacara standar. Nalika nguji dina Repository torvalds/linux, ngagunakeun indéks sabalikna ngamungkinkeun pikeun nyepetkeun operasi "git push" intensif sumberdaya ku 1.49 kali, sareng operasi saderhana sapertos ngitung ukuran hiji obyék nganggo "git cat- file —batch='%(objectsize:disk)' "77 kali. File (".rev") kalayan indéks sabalikna bakal disimpen di jero gudang dina diréktori ".git/objects/pack".

    Émut yén Git nyimpen sadaya data dina bentuk objék, anu aya dina file anu misah. Pikeun ningkatkeun efisiensi gawé bareng gudang, obyék ogé disimpen dina file pack, dimana inpormasi dibere dina bentuk aliran objék anu silih nuturkeun (format anu sami dianggo nalika nransferkeun objék nganggo git fetch sareng git push. paréntah). Pikeun unggal file pak, file indéks (.idx) dijieun, nu ngidinan Anjeun pikeun gancang pisan nangtukeun offset dina file pak di mana objék dibikeun disimpen maké identifier obyék.

    Indéks sabalikna anu kalebet dina sékrési énggal ditujukeun pikeun ngaoptimalkeun prosés nangtukeun identifier obyék tina inpormasi ngeunaan panempatan objék dina file pak. Saméméhna, konvérsi sapertos ieu dilakukeun dina laleur bari nga-parsing file pakét sareng disimpen ukur dina mémori, anu henteu ngijinkeun indéks anu sami tiasa dianggo deui sareng maksa indéksna dibangkitkeun unggal waktos. Operasi ngawangun indéks asalna handap pikeun ngawangun hiji Asép Sunandar Sunarya pasangan obyék-posisi jeung asihan eta dumasar posisi, nu bisa nyandak lila pikeun file pak badag.

    Contona, hiji operasi pikeun mintonkeun eusi objék, nu ngagunakeun indéks langsung, éta 62 kali leuwih gancang ti operasi pikeun mintonkeun ukuran objék, nu data posisi-ka-obyek teu indéks. Saatos nganggo indéks sabalikna, operasi ieu mimiti nyandak waktos anu sami. Indéks ngabalikeun ogé ngamungkinkeun anjeun nyepetkeun operasi ngirim obyék nalika ngalaksanakeun paréntah dipulut sareng nyorong ku cara langsung nransferkeun data anu siap-siap tina disk.

    Sistem kontrol sumber Git 2.41 sayogi

  • Protokol "pembantu kredensial", anu dianggo pikeun nransferkeun kredensial nalika ngaksés repositori kalayan aksés terbatas, parantos nambihan dukungan pikeun ngalangkungan header WWW-Authenticate antara panangan kredensial sareng jasa dimana auténtikasi dilaksanakeun. Rojongan pikeun lulugu WWW-Authenticate ngidinan Anjeun pikeun lulus parameter wengkuan OAuth pikeun separation langkung granular aksés pamaké pikeun repositories jeung delimitation tina scopes sadia pikeun requests.
  • Nambahkeun pilihan pormat "%(ahead-behind:" kana paréntah for-each-ref: )", nu ngidinan Anjeun pikeun langsung ménta inpo ngeunaan jumlah commits hadir atawa bolos dina cabang tangtu, relatif ka cabang séjén (sabaraha hiji cabang di tukangeun atawa dihareupeun sejen dina tingkat komitmen). Saméméhna, pikeun ménta inpo sapertos kitu, anjeun kedah ngajalankeun dua paréntah misah: "git rev-list —count main..my-feature" pikeun meunangkeun jumlah commits unik kana cabang jeung "git rev-list -count my-feature. ..utama” pikeun meunangkeun angka leungit commits. Ayeuna itungan sapertos tiasa diréduksi jadi hiji paréntah, anu nyederhanakeun tulisan pawang sareng ngirangan waktos palaksanaan. Contona, pikeun mintonkeun cabang nu teu acan dihijikeun jeung evaluate naha éta di tukangeun atawa dihareupeun cabang utama, Anjeun bisa make hiji-liner: $ git for-each-ref —no-merged=origin/HEAD \ —format = '% (ngaran ulang: pondok) % (hareup-tukang: asal / sirah)' \ refs / huluna / tb / | kolom -t tb/cruft-extra-tips 2 96 tb/pikeun-unggal-ref-ngaluarkeun 16 96 tb/roaring-bitmaps 47 3 tinimbang skrip nu saméméhna dipaké, nu ngalir 17 kali leuwih laun: $ git pikeun-unggal-ref — format='%(refname:pondok)' —no-merged=origin/HEAD \ refs/heads/tb | bari baca ref do payun = "$(git rev-list -count origin/HEAD..$ref)" behind="$(git rev-list -count $ref..origin/HEAD)" printf "%s %d %d\n" "$ref" "$hareup" "$tukangeun" rengse | kolom -t tb/cruft-extra-tips 2 96 tb/pikeun-unggal-ref—teu kaasup 16 96 tb/roaring-bitmaps 47 3
  • Pilihan "-porcelain" geus ditambahkeun kana "git fetch" paréntah, lamun dieusian, kaluaran dihasilkeun dina format " ", kirang dibaca, tapi leuwih merenah pikeun parsing dina naskah.
  • Ditambahkeun setélan "fetch.hideRefs", anu ngamungkinkeun anjeun nyepetkeun operasi "git fetch" ku nyumputkeun sababaraha rujukan dina gudang lokal dina tahap mariksa yén server parantos ngirimkeun sakumpulan objék anu lengkep, anu ngahémat waktos ku ngawatesan cek ngan ka server ti mana data langsung dicandak. Contona, nalika ngajalankeun tés dina sistem kalawan repositories ngandung angka nu gede ngarupakeun tumbu éksternal dilacak, teu kaasup sakabeh Tumbu iwal nu ditujukeun ka target server $ jauh ngurangan dijalankeunnana operasi git fetch ti 20 menit ka 30 detik. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Paréntah "git fsck" nyadiakeun kamampuhan pikeun mariksa korupsi, matuh checksum, sarta correctness tina nilai dina bitmaps diakses sarta indéks sabalikna.
  • Paréntah "git clone --local" ayeuna ningalikeun kasalahan nalika nyobian nyalin tina gudang anu ngandung symlink di jero $ GIT_DIR.

sumber: opennet.ru

Tambahkeun komentar