Sistem kontrol sumber Git 2.41 tersedia

Setelah tiga bulan pengembangan, rilis sistem kontrol sumber terdistribusi Git 2.41 telah dipublikasikan. Git adalah salah satu sistem kontrol versi yang paling populer, andal, dan berperforma tinggi yang menyediakan alat pengembangan non-linear yang fleksibel berdasarkan percabangan dan penggabungan cabang. Untuk memastikan integritas riwayat dan ketahanan terhadap perubahan retroaktif, hashing implisit dari seluruh riwayat sebelumnya di setiap komit digunakan, juga dimungkinkan untuk memverifikasi tag individual dan komit dengan tanda tangan digital dari pengembang.

Dibandingkan dengan rilis sebelumnya, 542 perubahan diterima ke dalam versi baru, disiapkan dengan partisipasi 95 pengembang, 29 di antaranya mengambil bagian dalam pengembangan untuk pertama kalinya. Inovasi utama:

  • Peningkatan penanganan objek yang tidak dapat dijangkau yang tidak direferensikan di repositori (cabang atau tag tidak direferensikan). Objek yang tidak dapat dijangkau dihapus oleh pengumpul sampah, tetapi tetap berada di repositori untuk waktu tertentu sebelum dihapus untuk menghindari kondisi balapan. Untuk melacak periode objek yang tidak dapat dijangkau, perlu mengikat label dengan waktu perubahan objek serupa, yang tidak memungkinkan penyimpanannya dalam satu file paket, di mana semua objek memiliki waktu perubahan yang sama. Sebelumnya, setiap objek yang tidak dapat dijangkau disimpan dalam file terpisah, yang menyebabkan masalah jika ada banyak objek baru yang tidak dapat dijangkau yang belum dihapus. Dalam rilis baru, secara default, mekanisme "cruft packs" digunakan untuk mengemas objek yang tidak dapat dijangkau, yang memungkinkan penyimpanan semua objek yang tidak dapat dijangkau dalam satu file paket, dan mencerminkan data pada waktu modifikasi setiap objek dalam tabel terpisah yang disimpan dalam file dengan ekstensi β€œ.mtimes” dan ditautkan menggunakan file indeks dengan ekstensi β€œ.idx”.
    Sistem kontrol sumber Git 2.41 tersedia
  • Secara default, mempertahankan indeks terbalik (revindex) pada disk untuk file paket diaktifkan. Saat diuji pada repositori torvalds/linux, penggunaan indeks terbalik memungkinkan kami untuk mempercepat operasi "git push" intensif sumber daya sebanyak 1.49 kali, dan operasi sederhana, seperti menghitung ukuran satu objek menggunakan "git cat- file --batch='%(objectsize:disk)' Β» 77 kali. File (".rev") dengan indeks terbalik akan disimpan di dalam repositori di direktori ".git/objects/pack".

    Ingatlah bahwa Git menyimpan semua data dalam bentuk objek, yang ditempatkan dalam file terpisah. Untuk meningkatkan efisiensi bekerja dengan repositori, objek juga ditempatkan dalam file paket, di mana informasi disajikan dalam bentuk aliran objek yang mengikuti satu demi satu (format serupa digunakan saat mentransfer objek dengan git fetch dan git perintah dorong). File indeks (.idx) dibuat untuk setiap file paket, yang memungkinkan Anda menentukan dengan sangat cepat offset dalam file paket tempat objek tertentu disimpan oleh pengidentifikasi objek.

    Indeks terbalik yang disertakan dalam rilis baru ini bertujuan untuk menyederhanakan proses penentuan ID objek dari informasi tentang lokasi objek dalam file paket. Sebelumnya, konversi semacam itu dilakukan dengan cepat selama penguraian file paket dan hanya disimpan dalam memori, yang tidak memungkinkan penggunaan kembali indeks tersebut dan memaksa indeks dibuat setiap kali. Operasi membangun indeks direduksi menjadi membangun array pasangan objek-posisi dan mengurutkannya berdasarkan posisi, yang bisa memakan waktu lama untuk file paket besar.

    Misalnya, operasi menampilkan konten objek, yang menggunakan indeks langsung, 62 kali lebih cepat daripada operasi menampilkan ukuran objek, yang data hubungan posisi-ke-objeknya tidak diindeks. Setelah menggunakan indeks terbalik, operasi ini mulai memakan waktu yang kira-kira sama. Indeks terbalik juga memungkinkan Anda untuk mempercepat operasi pengiriman objek saat mengeksekusi perintah ambil dan dorong dengan langsung mentransfer data yang sudah jadi dari disk.

    Sistem kontrol sumber Git 2.41 tersedia

  • Menambahkan dukungan untuk meneruskan header WWW-Authenticate antara penangan kredensial dan layanan otentikasi ke protokol "pembantu kredensial" yang digunakan untuk meneruskan kredensial saat mengakses repositori terbatas. Dukungan untuk header WWW-Authenticate memungkinkan parameter cakupan OAuth diteruskan ke akses pengguna yang lebih terpisah secara terperinci ke repositori dan membatasi cakupan yang tersedia untuk permintaan.
  • Menambahkan opsi format "%(di depan-belakang: )", yang memungkinkan Anda untuk segera mendapatkan informasi tentang jumlah komit yang ada atau tidak ada di cabang tertentu, relatif terhadap cabang lain (seberapa jauh satu cabang tertinggal atau di depan yang lain pada tingkat komit). Sebelumnya, mendapatkan informasi ini memerlukan dua perintah terpisah: "git rev-list --count main..my-feature" untuk mendapatkan jumlah komit yang unik untuk sebuah cabang, dan "git rev-list --count my-feature.. main" untuk mendapatkan nomor komit yang hilang. Sekarang perhitungan seperti itu dapat direduksi menjadi satu perintah, yang menyederhanakan penangan penulisan dan mengurangi waktu eksekusi. Misalnya, untuk menampilkan cabang yang tidak digabungkan dan mengevaluasi apakah cabang tersebut berada di belakang atau di depan cabang utamanya, Anda dapat menggunakan one-liner: $ git for-each-ref --no-merged=origin/HEAD \ --format=' %(refname:pendek) %(depan-belakang :origin/HEAD)' \ refs/heads/tb/ | column -t tb/cruft-extra-tips 2 96 tb/for-each-refβ€”exclude 16 96 tb/roaring-bitmaps 47 3 alih-alih skrip yang digunakan sebelumnya, yang 17 kali lebih lambat: $ git for-each-ref - format='%(refname:short)' --no-merged=origin/HEAD \ refs/heads/tb | sambil membaca ref lakukan di depan="$(git rev-list --count Origin/HEAD..$ref)" di belakang="$(git rev-list --count $ref..Origin/HEAD)" printf "%s %d %d\n" "$ref" "$di depan" "$di belakang" selesai | column -t tb/cruft-extra-tips 2 96 tb/for-each-refβ€”exclude 16 96 tb/roaring-bitmaps 47 3
  • Menambahkan opsi "--porcelain" ke perintah "git fetch", yang menghasilkan keluaran dalam format " ”, kurang dapat dibaca, tetapi lebih nyaman untuk diuraikan dalam skrip.
  • Menambahkan pengaturan "fetch.hideRefs" untuk mempercepat operasi "git fetch" dengan menyembunyikan sebagian tautan di repositori lokal pada tahap pemeriksaan apakah server mengirim kumpulan objek lengkap, yang menghemat waktu dengan membatasi pemeriksaan hanya ke server dari mana data diambil secara langsung. Misalnya, saat menguji sistem dengan repositori yang berisi tautan eksternal terlacak dalam jumlah besar, mengecualikan semua tautan kecuali yang ditujukan ke server target $remote mengurangi operasi "git fetch" dari 20 menit menjadi 30 detik. $ git -c fetch.hideRefs=refs -c fetch.hideRefs=!refs/remote/$remote \ ambil $remote
  • Perintah "git fsck" mengimplementasikan kemampuan untuk memeriksa kerusakan, pencocokan checksum, dan kebenaran nilai dalam bitmap aksesibilitas dan indeks terbalik.
  • Perintah "git clone --local" sekarang menampilkan kesalahan saat mencoba menyalin dari repositori yang berisi tautan simbolis di dalam $GIT_DIR.

Sumber: opennet.ru

Tambah komentar