
Disampaikan oleh rilis sistem manajemen kode sumber terdistribusi Git 2.55Di antara perubahan utama: mengaktifkan build default dengan Rust, implementasi untuk Linux Proses fsmonitor, strategi baru untuk pengemasan ulang indeks MIDX inkremental, perintah git history fixup untuk memperbaiki commit, optimasi pembuatan bitmap ketersediaan objek, dukungan untuk eksekusi hook secara paralel, perintah git format-rev. Kode Git didistribusikan oleh berlisensi di bawah GPLv2+.
Dibandingkan dengan rilis sebelumnya, versi baru ini mencakup 505 perubahan yang disiapkan dengan partisipasi 100 pengembang, 33 di antaranya baru mengenal pengembangan Git.
Inovasi utama (github.blog, gitlab.com/blog, gitlab.com/git-scm):
- По умолчанию termasuk Dukungan untuk komponen Rust. Kompilator rustc. ditambahkan ke dalam dependensi build. Untuk membangun tanpa Rust, Anda dapat menggunakan flag NO_RUST=1 saat menjalankan utilitas make atau -Drust=disabled saat menjalankan meson configure. Kemampuan untuk menonaktifkan pembangunan dengan Rust akan didukung hingga Git 3.0, di mana Rust akan termasuk Di antara dependensi yang dibutuhkan, bahasa Rust mengimplementasikan lapisan untuk portabilitas antara konfigurasi hash SHA-1 dan SHA-256, serta beberapa fungsi internal, seperti pengkodean dan dekode bilangan bulat dengan panjang variabel. Komponen internal Git yang lebih signifikan diharapkan akan ditulis ulang dalam Rust di masa mendatang.
- Kepada tim eksperimentalriwayat gitOperasi "git history fixup" telah ditambahkan ke alat penulisan ulang riwayat commit, yang menyediakan kemampuan untuk menulis ulang riwayat commit. Operasi fixup memungkinkan Anda untuk memindahkan perubahan yang ditambahkan melalui git add ke commit sebelumnya dan secara otomatis menulis ulang semua commit berikutnya, mirip dengan menjalankan perintah git commit --fixup=. dan menjalankan git rebase --autosquash ~.
- Untuk platform Linux proses latar belakang yang diterapkan fsmonitoryang melacak perubahan pada sistem file menggunakan suatu mekanisme. batalkan dan memungkinkan Anda untuk menghindari penelusuran seluruh direktori kerja saat menjalankan perintah seperti git status. Ini dapat diaktifkan melalui "core.fsmonitor'.
- Perintah git repack kini memiliki opsi baru --write-midx=incremental. Opsi ini mengimplementasikan strategi baru untuk memperbarui metadata dalam indeks MIDX inkremental (indeks multi-pack), sehingga menghilangkan kebutuhan untuk mengemas ulang seluruh indeks. Indeks multi-pack inkremental menggunakan lapisan (layer) alih-alih indeks besar tunggal yang berisi informasi tentang distribusi objek di seluruh packfile. Setiap lapisan mencakup sejumlah packfile tertentu dan disimpan dalam file bitmap terpisah. Struktur ini memungkinkan data tentang objek dalam packfile baru ditambahkan ke indeks dengan menambahkan lapisan baru ke indeks tanpa membangun kembali lapisan yang ada. Perintah git repack --write-midx=incremental menambahkan lapisan baru ke indeks MIDX inkremental, yang mencakup packfile yang baru dibuat. Jika dikombinasikan dengan mode pengemasan repositori --geometric, perintah baru ini memungkinkan Anda untuk menggabungkan objek baru dari beberapa packfile ke dalam satu packfile yang lebih besar dan, jika perlu, mengemas dan menggabungkan beberapa lapisan yang berdekatan dari indeks MIDX inkremental. Strategi ini memungkinkan git repack untuk hanya menulis ulang lapisan teratas, membiarkan lapisan yang lebih lama dan lebih besar tetap utuh, dan mencegah pertumbuhan rantai lapisan yang tidak terkontrol dengan menjaga jumlah total lapisan sebanding dengan logaritma dari jumlah total objek.
- Pembuatan bitmap ketersediaan objek telah dioptimalkan secara signifikan melalui algoritma penelusuran pohon objek baru yang menghilangkan rekursi yang tidak perlu, caching posisi objek, pengurutan bitmap sebelum menggabungkannya dengan operasi XOR, dan pengerjaan ulang kode untuk membuat bitmap pseudo-merge (penggabungan semu). Dalam repositori pengujian, optimasi mengurangi waktu pembuatan bitmap dari 612 menjadi 294 detik.
- Kemampuan untuk menjalankan tugas-tugas independen secara paralel telah diimplementasikan. kait Dalam file konfigurasi, hook yang memengaruhi atau mempertimbangkan status bersama, seperti hook yang mengubah catatan commit atau memeriksa indeks dan working tree, tidak dapat dijalankan secara paralel. Namun, hook untuk pemeriksaan linter dan pengujian unit dapat dijalankan secara paralel. Hook yang memungkinkan eksekusi paralel dikonfigurasi menggunakan parameter hook.hook_name.parallel = true. Jumlah job yang dapat dijalankan secara bersamaan ditentukan oleh hook hook.jobs. .jobs atau opsi baris perintah -j.
- Perintah git pack-objects --path-walk sekarang memungkinkan Anda untuk menentukan filter seperti blob:none, blob:limit= , pohon:0, objek:tipe= , jarang: dan menggabungkan:. Dalam pengujian, membuang blob saat menjalankan --path-walk mengurangi ukuran file pack yang dihasilkan sebesar 16%.
- Menambahkan perintah git format-rev untuk memformat revisi dan nama objek yang disebutkan dalam daftar commit atau ditemukan dalam teks sembarang (misalnya, ini dapat digunakan dalam hook untuk memproses catatan commit).
git terakhir dimodifikasi | git format-rev --stdin-mode=text --format=%an
Junio C Hamano bawaan/commit.c
- Penggunaan karakter escape untuk sebagian besar urutan kontrol terminal dalam pesan informasi dan teks kesalahan yang dikirim oleh server diaktifkan secara default. Saat mengakses server berbahaya, urutan escape tersebut dapat digunakan untuk menyembunyikan atau memodifikasi output, misalnya, melalui urutan escape untuk pergerakan kursor dan penghapusan teks. Dukungan untuk urutan escape untuk penyorotan elemen tetap dipertahankan.
- Perintah git checkout -m sekarang secara otomatis menyimpan perubahan lokal yang saling bertentangan ke area stash tanpa mengharuskan Anda untuk segera menyelesaikan konflik tersebut.
- Perintah `git push` sekarang mendukung pengiriman cabang ke beberapa server Git eksternal dengan satu perintah. Misalnya, untuk mengirimkan cabang utama tidak hanya ke server utama tetapi juga ke server mirror, Anda dapat membuat grup publikasi yang terdiri dari server GitHub, GitLab, dan server mirror:
git config remotes.publish "github gitlab mirror"
git push publish main
- Opsi --graph-lane-limit= telah ditambahkan ke perintah git log --graph. Untuk membatasi jumlah garis vertikal saat memvisualisasikan cabang, yang memungkinkan Anda menyisakan ruang di layar untuk data commit di repositori dengan jumlah cabang yang banyak.
...
* | | | | 619931f561 Gabungkan cabang 'dl/posix-unused-warning-clang'
|\ \ \ \ \
| * | | | ~ cf48887610 compat/posix.h: menyederhanakan perbandingan GIT_GNUC_PREREQ()
| * | | | ~ ffd45926dc compat/posix.h: bersihkan GIT_GNUC_PREREQ() dan UNUSED
|\ \ \ \ \~
| * | | | ~3f5203eeb4 ls-files: filter pathspec sebelum lstat
- Opsi --max-count-oldest= telah ditambahkan ke perintah git log dan git rev-list. , yang memungkinkan Anda untuk memilih N commit terlama dalam suatu rentang.
Sumber: linux.org.ru
