Rilis kontrol sumber Git 2.37

Rilis sistem kontrol sumber terdistribusi Git 2.37 telah diumumkan. 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, 395 perubahan diterima ke dalam versi baru, disiapkan dengan partisipasi 75 pengembang, 20 di antaranya mengambil bagian dalam pengembangan untuk pertama kalinya. Inovasi utama:

  • Mekanisme indeks parsial (indeks renggang), yang hanya mencakup sebagian dari repositori, telah siap untuk digunakan secara luas. Indeks parsial dapat meningkatkan kinerja dan menghemat ruang di repositori yang melakukan operasi kloning parsial (pembayaran jarang) atau bekerja dengan salinan repositori yang tidak lengkap. Rilis baru ini menyelesaikan integrasi indeks parsial ke dalam perintah git show, git sparse-checkout, dan git stash. Manfaat kinerja yang paling nyata dari penggunaan indeks parsial terlihat pada perintah git stash, yang mengalami peningkatan kecepatan eksekusi sebesar 80% dalam beberapa situasi.
  • Mekanisme “cruft packs” baru telah diterapkan untuk mengemas objek yang tidak dapat dijangkau yang tidak direferensikan dalam repositori (tidak direferensikan oleh cabang atau tag). Objek yang tidak dapat dijangkau akan dihapus oleh pengumpul sampah, tetapi tetap berada di repositori selama waktu tertentu sebelum dihapus untuk menghindari kondisi balapan. Untuk melacak periode kemunculan objek yang tidak dapat dijangkau, perlu untuk melampirkan tag pada objek tersebut dengan waktu perubahan objek serupa, yang tidak memungkinkan menyimpannya dalam satu file paket di mana semua objek memiliki waktu perubahan yang sama. Sebelumnya, menyimpan setiap objek dalam file terpisah menimbulkan masalah ketika terdapat sejumlah besar objek baru yang tidak dapat dijangkau dan belum memenuhi syarat untuk dihapus. Mekanisme “cruft packs” yang diusulkan memungkinkan Anda untuk menyimpan semua objek yang tidak dapat dijangkau dalam satu file paket, dan mencerminkan data tentang waktu modifikasi setiap objek dalam tabel terpisah yang disimpan dalam file dengan ekstensi “.mtimes”.
  • Untuk Windows dan macOS, terdapat mekanisme bawaan untuk melacak perubahan pada sistem file, memungkinkan Anda menghindari iterasi pada seluruh direktori kerja saat melakukan operasi seperti "status git". Sebelumnya, untuk melacak perubahan, utilitas eksternal untuk melacak perubahan di FS, seperti Watchman, dapat dihubungkan melalui hook, tetapi ini memerlukan instalasi program dan konfigurasi tambahan. Sekarang fungsionalitas yang ditentukan sudah ada di dalamnya dan dapat diaktifkan dengan perintah “git config core.fsmonitor true”.
  • Dalam perintah "git sparse-checkout", dukungan untuk alternatif mode "—cone", metode mendefinisikan templat untuk kloning parsial, telah dinyatakan usang, yang memungkinkan, ketika menentukan bagian dari repositori yang tunduk pada operasi kloning, untuk membuat daftar file individual menggunakan sintaks “.gitignore”, yang tidak memungkinkan penggunaan indeks parsial untuk optimasi.
  • Peningkatan fleksibilitas dalam mengonfigurasi panggilan fsync() untuk menghapus perubahan pada disk. Dukungan untuk strategi sinkronisasi "batch" telah ditambahkan ke parameter "core.fsyncMethod", yang memungkinkan mempercepat pekerjaan saat menulis sejumlah besar file individual dengan mengumpulkan perubahan dalam cache tulis balik, yang disetel ulang oleh satu fsync() panggilan. Pengujian, yang menghasilkan 500 file ditambahkan menggunakan perintah "git add", diselesaikan dalam 0.15 detik ketika mode baru diaktifkan, sedangkan panggilan fsync() membutuhkan waktu 1.88 detik untuk setiap file, dan tanpa menggunakan fsync - 0.06 detik.
  • Perintah traversal cabang seperti “git log” dan “git rev-list” sekarang memiliki opsi “-since-as-filter=X” yang memungkinkan Anda menyaring informasi tentang commit yang lebih lama dari “X”. Berbeda dengan opsi “—sejak”, perintah baru diimplementasikan sebagai filter yang tidak menghentikan pencarian setelah penerapan pertama lebih lama dari waktu yang ditentukan.
  • Dalam perintah “git remote”, saat menentukan tanda “-v”, informasi tentang klon sebagian repositori ditampilkan.
  • Menambahkan pengaturan "transfer.credentialsInUrl", yang dapat mengambil nilai "warn", "die" dan "allow". Jika ditentukan dalam parameter “jarak jauh. Kredensial teks biasa .url", mencoba melakukan operasi "pengambilan" atau "push" akan gagal dengan kesalahan jika pengaturan "transfer.credentialsInUrl" diatur ke "mati", atau peringatan jika diatur ke "peringatkan".
  • Secara default, implementasi baru dari mode interaktif perintah “git add -i”, yang ditulis ulang dari Perl ke C, diaktifkan.

Sumber: opennet.ru

Tambah komentar