Fitur baru di Git 3: closures

Git adalah sistem kontrol versi populer. Di Git, perubahan atom dari satu atau beberapa file disebut komit, dan beberapa komit berturut-turut digabungkan menjadi cabang. Cabang digunakan untuk mengimplementasikan ide-ide baru (fitur).



Kebetulan idenya adalah jalan buntu dan pengembang telah salah jalan, jadi dia harus kembali ke versi aslinya. Dia harus melupakan cabang baru, beralih ke cabang dev atau master utama dan terus bekerja. Dalam hal ini, "keturunan" akan menggantung selamanya, serta keinginan untuk menghapusnya. Tetapi bagaimana cara menghapus bagian dari sejarah? Cabang ini menunjukkan upaya programmer yang bekerja keras, meskipun sia-sia. Jadi akan lebih mudah untuk melapor kepada bos, karena hasil yang gagal juga merupakan hasil!


Saya cepat-cepat bersukacita bahwa pengembang Git akan memperkenalkan perintah baru untuk menutup cabang "tunawisma" di versi ketiga. Versi saat ini adalah 2.21.0 .


Bagaimana cara menggunakan perintah ini, apa manfaatnya dan apa yang dipikirkan perusahaan IT? Artikel ini menjawab pertanyaan-pertanyaan ini dan lainnya.


Deskripsi


Sekarang dimungkinkan untuk menutup cabang yang gagal atas salah satu dari komit sebelumnya. Busur penutupan berwarna kuning pada gambar di bawah ini.




Komit 4 adalah yang terakhir untuk fitur yang gagal. Itu ditutup atas komit 1 , dan kemudian kita kembali ke master dan pergi ke arah lain (komit 5 ).


Anda juga dapat menutup komit atas dirinya sendiri, sehingga menciptakan loop :




Anda dapat menutup cabang di atas komit - Git pintar, menghitung perbedaan dan menggabungkan semuanya dengan benar:




Bagaimana cara menggunakan


Perintah merge tidak termasuk fungsi penutupan, karena untuk kasus pertama cabang akan diteruskan dengan cepat , dan untuk kasus kedua tidak ada yang dilakukan ( git already up to date ).


Agar tidak mengubah perilaku lama, pengembang memutuskan untuk memperkenalkan perintah penutupan:


 git closure -s $source_commit -d $dest_commit -m $message 

Argumen pertama -s $source_commit menetapkan hash dari komit yang ingin Anda rentangkan loop, dan yang kedua (opsional) -d $dest_commit menetapkan komit di mana loop akan ditutup. Jika tidak ada, penutupan terjadi di cabang check-out saat ini. Argumen -m $message menetapkan pesan penutupan, seperti failed feature, revert to origin . Namun, opsi --allow-empty-message juga tersedia, yang memungkinkan komit tanpa pesan. Secara default, Git hanya memungkinkan satu penutupan untuk sepasang commit. Untuk melewati batasan ini, opsi --allow-multiple-closures tersedia.



Setelah perintah dieksekusi, Git menghitung perubahan, dan pada komit akhir, sebuah double diff akan ditampilkan: dari basis dan cabang penutupan. Dalam kasus umum, ini adalah perbedaan n-dimensi, yaitu, bisa ada banyak penutupan yang Anda inginkan. closure-commit mirip dengan menggabungkan-komit dengan satu-satunya perbedaan yang berisi beberapa pesan, bukan satu.


Sayangnya, Git GUI yang ada tidak memiliki dukungan penutupan yang baik. Versi pratinjau GitExtensions menampilkan kurva gabungan alih-alih busur elegan. Lihatlah bidang baru seperti Closure message Closure diff dan Closure diff :



Perlu dicatat bahwa perintah closure selalu mengubah sejarah (karena sekarang Git adalah mesin waktu yang lengkap!), Jadi sekarang dimungkinkan untuk mendorong cabang hanya dengan opsi --force , atau safe --force-with-lease opsi --force-with-lease .


Rebase juga tersedia untuk cabang yang dilingkarkan, meskipun logika untuk menghitung ulang komit rumit.


Juga opsi otomatis memungkinkan penutupan otomatis semua cabang lama. Dalam hal ini, komit penutup adalah yang memulai cabang. Dengan plugin Git IDE, penutupan dapat dijalankan secara berkala. Di GitExtensions ada plugin serupa Hapus cabang yang sudah usang .


Apa yang dipikirkan perusahaan IT


Perusahaan IT besar: Google, Facebook, Apple, DeepMind, Positive Technologies, dan terutama Microsoft, sedang menunggu penutupan dengan penuh semangat, karena sekarang akan dimungkinkan untuk memformalkan siklus hidup cabang, termasuk yang tidak bermigrasi.


Salah satu manajer top Microsoft, Michael Richter, menulis :


Fitur baru Git, tentu saja, akan mengurangi kekacauan di dunia pengembangan sumber terbuka (dan tidak hanya). Ada banyak cabang "menggantung" di repositori kami. Sebagai contoh, dalam vscode kami memiliki lebih dari 200 di antaranya, dan di TypeScript lebih dari 300! Dan masalah ini bukan hanya masalah kita. Penutupan tidak hanya meningkatkan pengorganisasian, tetapi juga memungkinkan untuk melacak alasan programmer, kadang-kadang benar-benar tidak dapat dipahami bahkan untuk kolega :) Closures mengingatkan saya pada film "Kembali ke Masa Depan", di mana karakter bepergian ke masa lalu dan masa depan. Saya suka film ini, saya menontonnya beberapa kali. Dan saya pikir saya akan lebih mencintai Git karena jika fitur ini :)

Catatan


Jika sebelumnya grafik komit adalah grafik asiklik terarah (DAG), maka penutupan diperluas ke grafik berarah umum. Menggunakan Git, Anda bisa menggambarkan ekspresi reguler di mana status dikomit, dan alfabet adalah himpunan semua pesan. Tapi ini adalah topik untuk hub "Pemrograman tidak normal", dan karenanya melampaui cakupan artikel ini. Namun, jika ini terdengar menarik bagi Anda, lihat artikel tentang cara menyimpan pohon keluarga di dalam Git.

Source: https://habr.com/ru/post/id445680/


All Articles