Rilis sistem kontrol sumber terdistribusi Git 2.22

Disampaikan oleh rilis sistem kontrol sumber terdistribusi Git 2.22.0. 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 di setiap penerapan digunakan, dan dimungkinkan juga untuk mengesahkan masing-masing tag dan penerapan dengan tanda tangan digital pengembang.

Dibandingkan dengan rilis sebelumnya, versi baru menyertakan 745 perubahan, disiapkan dengan partisipasi 74 pengembang, 18 di antaranya mengambil bagian dalam pengembangan untuk pertama kalinya. Utama inovasi:

  • Tersedia sejak rilis 1.18, mode commit rebase baru "git rebase --rebase-merges" menggantikan opsi lama "--preserve-merges", yang sekarang sudah tidak digunakan lagi. Operasi "git rebase" digunakan untuk mengganti serangkaian komit dengan komit dasar baru, misalnya, untuk memindahkan cabang terpisah yang mengembangkan beberapa fitur baru ke status cabang master saat ini, yang mencakup perbaikan yang ditambahkan setelah cabang :

    o - o - o (fitur saya)

    /

    o - o - o - o - o (tuan)

    o - o - o (fitur saya)

    /

    o - o - o - o - o (tuan)

    Untuk mempertahankan struktur cabang di cabang yang dimigrasi, opsi “--preserve-merges” sebelumnya dapat digunakan, yang, ketika dijalankan dalam mode interaktif (git rebase -i --preserve-merges), memungkinkan pengeditan riwayat penerapan, tetapi tidak menjamin pelestarian lengkap struktur repositori. Mode “--rebase-merges” yang baru memungkinkan Anda mempertahankan struktur perubahan di cabang yang dimigrasi, sekaligus menyediakan serangkaian operasi interaktif, termasuk menghapus, mengelompokkan ulang, dan mengganti nama komit.

    Misalnya, "--rebase-merge" memungkinkan mengunggah ulang komit dari cabang terpisah ke cabang master yang lebih baru, sambil mempertahankan struktur cabang di cabang yang dimigrasi, dan membuat beberapa perubahan pada catatan komit dengan cepat.

  • Menambahkan dukungan untuk membuat cabang baru berdasarkan hasil penentuan basis penggabungan dua cabang lainnya (basis penggabungan, mengikat nenek moyang yang sama) menggunakan konstruksi “git Branch new A...B” dan “git checkout -b new A...B”, di mana “A ...B" melibatkan pendefinisian basis gabungan antara dua komit yang ditentukan, mirip dengan bagaimana "git checkout A...B" menggeser HEAD ke komit dasar dan "diff A. ..B" menunjukkan perubahan antara komit "B" dan sama dengan komit "A" "Leluhur.

    Misalnya, ketika mengerjakan cabang fitur-saya yang terpisah, fitur ini dapat digunakan ketika Anda ingin memulai dari cabang yang berbeda, misalnya, dari tempat yang sama di cabang master tempat cabang fitur-saya diperiksa. Sebelumnya, hal ini memerlukan pemeriksaan log perubahan secara manual, yang akan merepotkan jika Anda memiliki riwayat perubahan yang besar, kemudian menjalankan “git merge-base master my-feature” untuk menghitung hash dari basis gabungan antara cabang master dan my-feature dan membuat cabang baru yang berhubungan dengan nenek moyang yang sama “ git Branch hash fitur saya yang lain." Di Git 2.22, Anda dapat menggunakan sintaks "git Branch my-other-feature A...B" untuk membuat cabang yang berhubungan dengan basis gabungan dari dua cabang lainnya;

  • Menambahkan opsi "git Branch --show-current" untuk menampilkan nama cabang yang diperoleh selama operasi checkout;
  • Menambahkan opsi "git checkout —no-overlay — dir", yang memungkinkan, saat melakukan operasi checkout, untuk membawa konten direktori dir ke bentuk yang sepenuhnya sesuai dengan status cabang master. Misalnya, jika ada file di salinan lokal direktori dir yang tidak ada di cabang master, maka secara default ketika menjalankan "git checkout master - dir" akan dibiarkan, dan jika "--no-overlay ” opsi ditentukan, itu akan dihapus;
  • Perintah "git diff" menggunakan API universal untuk mengurai opsi, yang memungkinkan untuk menyatukan penanganan opsi dengan utilitas git lainnya. Misalnya, dalam “git diff”, semua opsi sekarang memiliki antagonisnya (“--function-context” dan “--no-function-context”);
  • Menambahkan kemampuan untuk memfilter tag tambahan yang dilampirkan pada penerapan di keluaran "git log" ("trailer" - tanda informasi tambahan, seperti Ditandatangani oleh dan Ditulis bersama oleh). Dimungkinkan untuk memfilter label berdasarkan kunci dan nilai, misalnya:
    "git log --pretty="%(trailer:key=Ditinjau oleh, hanya nilai)";

  • Mesin penelusuran baru, Trace2, telah ditambahkan, menawarkan format keluaran yang lebih fleksibel dan terstruktur. Trace2 memungkinkan Anda mengumpulkan telemetri tentang operasi yang dijalankan dan data kinerja untuk analisis dan debugging yang lebih rinci (pengendali ditetapkan oleh pengguna, tidak ada data yang dikirim secara eksternal);
  • Laporan “git bisect” telah dibuat lebih mudah dibaca, di mana komitmen yang bermasalah kini disorot dengan lebih jelas dan ringkasan statistik perubahan untuk setiap file ditampilkan (pada tingkat jumlah baris yang diubah);
  • Heuristik untuk menentukan penggantian nama direktori telah dikerjakan ulang untuk menghilangkan pemasangan label penggantian nama yang salah. Jika ragu, direktori tersebut sekarang ditandai sebagai bertentangan;
  • Peringatan ditampilkan ketika Anda mencoba memasang tag pada tag lain, yang biasanya dilakukan secara tidak sengaja dan dapat menyebabkan pengaturan tag pada penerapan yang salah (misalnya, konstruksi seperti “git tag -f -m “updated message” tag-saya1 tag-saya2″ akan menghasilkan tag yang dibuat pada tag lama, sedangkan pengembang mengharapkan tag baru dipasang pada komit yang ditunjuk oleh tag lama);
  • Pembuatan diaktifkan untuk repositori bitmap (struktur "bitmap jangkauan" berbasis disk), yang menyimpan data tentang kumpulan objek yang tersedia untuk setiap penerapan dan memungkinkan Anda dengan cepat menentukan keberadaan objek dasar. Struktur ini secara signifikan mengurangi waktu pelaksanaan operasi pengambilan data (git Fetch).

Sumber: opennet.ru

Tambah komentar