Rilis kontrol sumber Git 2.39

Setelah dua bulan pengembangan, sistem kontrol sumber terdistribusi Git 2.39 telah dirilis. Git adalah salah satu sistem kontrol versi yang paling populer, andal, dan berkinerja tinggi, menyediakan alat pengembangan non-linier yang fleksibel berdasarkan percabangan dan penggabungan. Untuk memastikan integritas riwayat dan ketahanan terhadap perubahan retroaktif, hashing implisit dari seluruh riwayat sebelumnya digunakan di setiap penerapan; dimungkinkan juga untuk mengesahkan masing-masing tag dan penerapan dengan tanda tangan digital pengembang.

Dibandingkan dengan rilis sebelumnya, versi baru menyertakan 483 perubahan, disiapkan dengan partisipasi 86 pengembang, 31 di antaranya mengambil bagian dalam pengembangan untuk pertama kalinya. Inovasi utama:

  • Perintah "git shortlog", yang dirancang untuk menampilkan ringkasan dengan statistik dari riwayat perubahan, telah menambahkan opsi "-group" untuk pengelompokan komit secara sewenang-wenang berdasarkan bidang yang tidak terbatas pada penulis atau pengimplementasi. Misalnya, untuk menampilkan daftar pengembang dengan informasi tentang jumlah perubahan, dengan mempertimbangkan pembantu yang disebutkan di bidang "Ditulis bersama oleh", Anda dapat menggunakan perintah: git shortlog -ns --group=author - -group=trailer:ditulis bersama oleh

    Output shortlog dapat dikumpulkan menggunakan penentu format, dan opsi “--group” dapat secara signifikan menyederhanakan pembuatan laporan yang kompleks dan menghilangkan kebutuhan akan perintah pengurutan tambahan. Misalnya, untuk membuat laporan dengan informasi tentang berapa banyak komitmen untuk rilis tertentu yang diterima setiap bulan, Anda dapat menentukan: 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 Sebelumnya, untuk melakukan operasi serupa perlu menggunakan utilitas sortir dan uniq: git log v2.38.0 .. —tanggal='format:%Y -%m' —format='%cd' | urutkan | unik -c

  • Kemampuan mekanisme “cruft packs”, yang dirancang untuk mengemas objek yang tidak dapat dijangkau yang tidak direferensikan dalam repositori (tidak direferensikan oleh cabang atau tag), telah diperluas. Objek yang tidak dapat dijangkau akan dihapus oleh pengumpul sampah, tetapi tetap berada di repositori selama waktu tertentu sebelum dihapus untuk menghindari kondisi balapan. Mekanisme “cruft packs” memungkinkan Anda untuk menyimpan semua objek yang tidak dapat dijangkau dalam satu file paket, dan menampilkan data waktu modifikasi setiap objek dalam tabel terpisah, disimpan dalam file terpisah dengan ekstensi “.mtimes”, sehingga berfungsi tidak tumpang tindih dengan total waktu modifikasi.

    Lamanya waktu objek yang tidak dapat dijangkau tetap berada di repositori sebelum benar-benar dihapus ditentukan oleh opsi “—prune=” " Namun, meskipun menunda sebelum menghapus adalah cara yang cukup efektif dan praktis untuk mencegah kerusakan repositori karena kondisi ras, hal ini tidak 100% dapat diandalkan. Untuk mempermudah memulihkan repositori yang rusak, rilis baru menyediakan kemampuan untuk menyimpan objek yang hilang dengan menambahkan opsi “--expire-to” ke perintah “git repack”, yang memungkinkan Anda menentukan file untuk membuat eksternal salinan semua objek yang dihapus. Misalnya untuk menyimpan objek yang tidak dapat dijangkau yang tidak berubah dalam 5 menit terakhir di file backup.git, Anda dapat menggunakan perintah: git repack --cruft --cruft-expiration=5.menit-menit.ago -d --expire -ke=../backup.git

  • Meningkat secara signifikan (hingga 70%) kecepatan operasi "git grep -cached" saat mencari di area yang menggunakan kloning parsial (sparse-checkout) dan yang memiliki indeks parsial (indeks jarang). Sebelumnya, ketika menentukan opsi "-cached", pencarian dilakukan pertama kali di indeks reguler, dan kemudian di indeks parsial, yang menyebabkan penundaan yang nyata saat mencari di repositori besar.
  • Verifikasi server terhadap koherensi objek baru sebelum ditempatkan di repositori selama operasi "git push" telah dipercepat. Dengan beralih ke akuntansi hanya untuk tautan yang dinyatakan saat pemeriksaan, dalam repositori pengujian dengan 7 juta tautan, yang hanya 3% di antaranya tercakup dalam operasi push, pengoptimalan yang dilakukan memungkinkan pengurangan waktu pemeriksaan sebanyak 4.5 kali.
  • Untuk melindungi terhadap potensi luapan bilangan bulat dalam kode, perintah "git apply" membatasi ukuran maksimum patch yang dapat diproses. Jika ukuran patch melebihi 1 GB, kesalahan akan ditampilkan.
  • Untuk melindungi dari potensi kerentanan, perubahan telah dilakukan untuk membersihkan informasi yang tidak perlu dari kumpulan header saat menggunakan modul h2h3 dengan opsi GIT_TRACE_CURL=1 atau GIT_CURL_VERBOSE=1 bersama dengan HTTP/2.
  • Saat melakukan pemeriksaan pada cabang yang merupakan tautan simbolik ke cabang lain, perintah "git symbolic-ref HEAD" sekarang menampilkan nama cabang target, bukan nama symlink.
  • Menambahkan dukungan untuk argumen @{-1} ke opsi “--edit-description” (“git Branch —edit-description @{-1}”) untuk mengedit deskripsi cabang sebelumnya.
  • Menambahkan perintah "git merge-tree --stdin" untuk meneruskan daftar opsi melalui input standar.
  • Pada sistem file jaringan, pengendali fsmonitor, yang memantau perubahan dalam sistem file, dinonaktifkan secara default.

Sumber: opennet.ru

Tambah komentar