Rilis Git 2.55 dari sistem kontrol sumber terdistribusi telah diumumkan. Perubahan utama meliputi: penyertaan build Rust secara default, 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 paralel, dan perintah "git format-rev". Git dilisensikan di bawah lisensi GPLv2+.
Dibandingkan dengan rilis sebelumnya, versi baru ini mencakup 505 perubahan yang disiapkan dengan bantuan 100 pengembang, 33 di antaranya baru mengenal pengembangan Git. Fitur baru utama (1, 2, 3):
- Dukungan komponen bahasa Rust diaktifkan secara default. Kompilator rustc
Rust telah ditambahkan ke 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, yang akan menyertakan Rust sebagai dependensi yang diperlukan. 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. Fungsi internal Git yang lebih signifikan diharapkan akan ditulis ulang dalam Rust di masa mendatang. - Perintah eksperimental "git history", yang menyediakan kemampuan untuk menulis ulang riwayat perubahan, telah diperbarui dengan operasi "git history fixup" untuk memperbaiki 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 fsmonitor telah diimplementasikan, yang memantau perubahan pada sistem file menggunakan mekanisme inotify dan memungkinkan Anda untuk menghindari penelusuran seluruh direktori kerja saat menjalankan perintah seperti "git status". Proses ini dapat diaktifkan melalui pengaturan "core.fsmonitor".
- Perintah "git repack" telah diperbarui dengan opsi "--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, melampirkan lapisan baru ke indeks tanpa membangun kembali lapisan yang sudah ada.
Perintah "git repack --write-midx=incremental" menambahkan lapisan baru ke indeks MIDX inkremental, yang mencakup file paket yang baru dibuat. Ketika dikombinasikan dengan mode pengemasan repositori "--geometric", perintah baru ini memungkinkan penggabungan objek baru dari beberapa file paket ke dalam satu file paket yang lebih besar dan, jika perlu, pengemasan dan penggabungan beberapa lapisan yang berdekatan dari indeks MIDX inkremental. Strategi ini memungkinkan "git repack" untuk hanya menulis ulang lapisan atas, membiarkan lapisan yang lebih lama dan lebih besar tetap utuh. Ini juga mencegah pertumbuhan rantai lapisan yang tidak terkontrol dengan menjaga jumlah total lapisan proporsional 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. Di repositori pengujian, optimasi ini mengurangi waktu pembuatan bitmap dari 612 menjadi 294 detik.
- Eksekusi paralel dari hook independen kini dimungkinkan 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 pengaturan 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 "gabungkan:". Dalam pengujian, membuang blob saat mengeksekusi "--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
- Pelepasan sebagian besar urutan kontrol terminal dalam pesan informasi dan teks kesalahan yang dikirimkan diaktifkan secara default. serverSaat mengakses konten berbahaya server 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 menyorot elemen telah 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 memungkinkan Anda untuk mendorong cabang ke beberapa server Git eksternal dengan satu perintah. Misalnya, untuk mendorong cabang utama tidak hanya ke server utama tetapi juga ke mirror, Anda dapat membuat grup "publish" dari server "github", "gitlab" dan "mirror":
git config remotes.publish "github gitlab mirror"
git push publish main - Perintah "git log --graph" sekarang memiliki opsi "--graph-lane-limit=". » 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 - Perintah "git log" dan "git rev-list" sekarang memiliki opsi "--max-count-oldest=". , yang memungkinkan Anda untuk memilih N commit terlama dalam suatu rentang.
Sumber: opennet.ru
