Sistem kawalan sumber Git 2.41 tersedia

Selepas tiga bulan pembangunan, keluaran sistem kawalan sumber yang diedarkan Git 2.41 telah diterbitkan. Git ialah salah satu sistem kawalan versi paling popular, boleh dipercayai dan berprestasi tinggi yang menyediakan alat pembangunan bukan linear yang fleksibel berdasarkan cawangan dan penggabungan cawangan. Untuk memastikan integriti sejarah dan penentangan terhadap perubahan retroaktif, pencincangan tersirat keseluruhan sejarah sebelumnya dalam setiap komit digunakan, ia juga mungkin untuk mengesahkan teg individu dan komit dengan tandatangan digital daripada pembangun.

Berbanding dengan keluaran sebelumnya, 542 perubahan telah diterima ke dalam versi baharu, disediakan dengan penyertaan 95 pembangun, di mana 29 daripadanya mengambil bahagian dalam pembangunan buat kali pertama. Inovasi utama:

  • Pengendalian yang lebih baik bagi objek yang tidak boleh dicapai yang tidak dirujuk dalam repositori (cawangan atau teg tidak dirujuk). Objek yang tidak boleh dicapai dialih keluar oleh pemungut sampah, tetapi kekal dalam repositori untuk masa tertentu sebelum dialih keluar untuk mengelakkan keadaan perlumbaan. Untuk menjejaki tempoh objek yang tidak boleh dicapai, adalah perlu untuk mengikat label kepada mereka dengan masa perubahan objek yang serupa, yang tidak membenarkan menyimpannya dalam satu fail pek, di mana semua objek mempunyai masa perubahan yang sama. Sebelum ini, setiap objek yang tidak boleh dicapai telah disimpan dalam fail yang berasingan, yang membawa kepada masalah jika terdapat sejumlah besar objek baru yang tidak boleh dicapai yang belum tertakluk kepada pemadaman. Dalam keluaran baharu, secara lalai, mekanisme "kruft pek" digunakan untuk mengemas objek yang tidak boleh dicapai, yang membolehkan menyimpan semua objek yang tidak boleh dicapai dalam satu fail pek, dan mencerminkan data pada masa pengubahsuaian setiap objek dalam jadual berasingan yang disimpan dalam fail dengan sambungan ".mtimes" dan dipautkan menggunakan fail indeks dengan sambungan ".idx".
    Sistem kawalan sumber Git 2.41 tersedia
  • Secara lalai, mengekalkan indeks terbalik (revindex) pada cakera untuk fail pek didayakan. Apabila diuji pada repositori torvalds/linux, penggunaan indeks terbalik membolehkan kami mempercepatkan operasi "git push" intensif sumber sebanyak 1.49 kali, dan operasi mudah, seperti mengira saiz objek tunggal menggunakan "git cat- fail --batch='%(saiz objek:cakera)' Β» 77 kali. Fail (".rev") dengan indeks terbalik akan disimpan di dalam repositori dalam direktori ".git/objects/pack".

    Ingat bahawa Git menyimpan semua data dalam bentuk objek, yang diletakkan dalam fail berasingan. Untuk meningkatkan kecekapan bekerja dengan repositori, objek juga diletakkan dalam fail pek, di mana maklumat dibentangkan dalam bentuk aliran objek mengikut satu demi satu (format serupa digunakan apabila memindahkan objek dengan git fetch dan git arahan tolak). Fail indeks (.idx) dicipta untuk setiap fail pek, yang membolehkan anda menentukan dengan cepat offset dalam fail pek yang mana objek yang diberikan disimpan oleh pengecam objek.

    Indeks terbalik yang disertakan dalam keluaran baharu bertujuan untuk memperkemas proses menentukan ID objek daripada maklumat tentang lokasi objek dalam fail pek. Sebelum ini, penukaran sedemikian dilakukan dengan cepat semasa menghurai fail pek dan disimpan hanya dalam ingatan, yang tidak membenarkan penggunaan semula indeks tersebut dan memaksa indeks dijana setiap kali. Operasi membina indeks dikurangkan kepada membina susunan pasangan kedudukan objek dan menyusunnya mengikut kedudukan, yang boleh mengambil masa yang lama untuk fail pek besar.

    Sebagai contoh, operasi memaparkan kandungan objek, yang menggunakan indeks langsung, adalah 62 kali lebih pantas daripada operasi menunjukkan saiz objek, yang mana data hubungan kedudukan-ke-objek tidak diindeks. Selepas menggunakan indeks terbalik, operasi ini mula mengambil masa yang lebih kurang sama. Indeks terbalik juga membolehkan anda mempercepatkan operasi menghantar objek apabila melaksanakan arahan ambil dan tolak dengan memindahkan terus data sedia dari cakera.

    Sistem kawalan sumber Git 2.41 tersedia

  • Menambah sokongan untuk menghantar pengepala WWW-Authenticate antara pengendali kelayakan dan perkhidmatan pengesahan kepada protokol "pembantu kelayakan" yang digunakan untuk menghantar bukti kelayakan apabila mengakses repositori terhad. Sokongan untuk pengepala WWW-Authenticate membolehkan anda menghantar parameter skop OAuth untuk memisahkan akses pengguna kepada repositori dengan lebih terperinci dan mengehadkan skop yang tersedia untuk permintaan.
  • Menambahkan pilihan format "%(ahead-behind: )", yang membolehkan anda segera mendapatkan maklumat tentang bilangan komit yang hadir atau tidak hadir dalam cawangan tertentu, berbanding dengan cawangan lain (berapa banyak ketinggalan satu cawangan atau mendahului cawangan lain pada tahap komitmen). Sebelum ini, mendapatkan maklumat ini memerlukan dua arahan berasingan: "git rev-list --count main..my-feature" untuk mendapatkan bilangan commit unik kepada cawangan, dan "git rev-list --count my-feature.. utama" untuk mendapatkan bilangan komit yang hilang. Kini pengiraan sedemikian boleh dikurangkan kepada satu arahan, yang memudahkan pengendali penulisan dan mengurangkan masa pelaksanaan. Sebagai contoh, untuk menunjukkan cawangan yang tidak digabungkan dan menilai sama ada ia berada di belakang atau di hadapan cawangan utamanya, anda boleh menggunakan satu baris: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(nama semula:pendek) %(depan-belakang :asal/KEPALA)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-refβ€”tidak termasuk 16 96 tb/roaring-bitmaps 47 3 berbanding skrip yang digunakan sebelum ini, iaitu 17 kali lebih perlahan: $ git for-each-ref β€” format='%(nama semula:pendek)' --no-merged=origin/HEAD \ refs/heads/tb | sambil baca 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" selesai | lajur -t tb/petua-tambahan-cruft 2 96 tb/untuk-setiap-refβ€”tidak termasuk 16 96 tb/peta-bit mengaum 47 3
  • Menambahkan pilihan "--porcelain" pada arahan "git fetch", yang menghasilkan output dalam format " ”, kurang boleh dibaca, tetapi lebih mudah untuk menghuraikan dalam skrip.
  • Menambah tetapan "fetch.hideRefs" untuk mempercepatkan operasi "git fetch" dengan menyembunyikan sebahagian daripada pautan dalam repositori tempatan pada peringkat menyemak sama ada pelayan menghantar set penuh objek, yang menjimatkan masa dengan mengehadkan semakan kepada pelayan sahaja daripada mana data diambil secara langsung. Sebagai contoh, apabila menguji pada sistem dengan repositori yang mengandungi sejumlah besar pautan luaran yang dijejaki, tidak termasuk semua pautan kecuali yang dialamatkan kepada pelayan $remote target mengurangkan operasi "git fetch" daripada 20 minit kepada 30 saat. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remotes/$remote \ fetch $remote
  • Perintah "git fsck" melaksanakan keupayaan untuk menyemak rasuah, pemadanan semak dan ketepatan nilai dalam peta bit kebolehaksesan dan indeks terbalik.
  • Perintah "git clone --local" kini memaparkan ralat apabila cuba menyalin daripada repositori yang mengandungi pautan simbolik di dalam $GIT_DIR.

Sumber: opennet.ru

Tambah komen