Git adalah sistem kontrol versi populer. Di dalamnya, perubahan atom satu atau lebih file disebut komit, dan beberapa komit berturut-turut digabungkan dalam cabang. Cabang digunakan untuk mengimplementasikan ide-ide baru (fitur).
Kebetulan idenya ternyata jalan buntu, pengembang mematikan jalan yang salah, dan ada kebutuhan untuk memutar kembali ke versi asli, untuk ini Anda perlu melupakan cabang baru dan beralih ke dev atau master utama , dan kemudian terus bekerja seolah-olah tidak ada yang terjadi. Dalam hal ini, "menembak" akan menggantung selamanya, seperti keinginan untuk menghapusnya. Tetapi bagaimana cara menghapus jika itu adalah bagian dari cerita? Proses ini menunjukkan upaya programmer gila kerja, meskipun sia-sia. Lebih mudah untuk melaporkan ke pihak yang berwenang, karena hasil yang gagal juga merupakan hasil!
Saya harap: para pengembang Git di versi 3 akan memperkenalkan perintah baru untuk menutup cabang-cabang tersesat tersebut. Biarkan saya mengingatkan Anda bahwa versi saat ini adalah 2.21.0 .
Bagaimana cara menggunakan tim ini, apa yang diberikannya dan apa yang dipikirkan perusahaan IT? Artikel ini menjawab pertanyaan-pertanyaan ini dan lainnya.
Deskripsi
Sekarang Anda dapat menutup cabang yang gagal dengan salah satu dari komit sebelumnya. Lengkungan patahan diwarnai kuning pada gambar di bawah ini.
Di sini komit 4
adalah yang terakhir untuk fitur yang gagal. Dia ditutup dari 1
, dan kemudian kembali ke master dan pergi ke arah lain, dari melakukan 5
.
Anda juga dapat mengunci komit ke dalam dirinya sendiri, sehingga menciptakan loop :
Anda dapat mengunci diri di komit apa pun - Git pintar akan menghitung perbedaan dan menggabungkan semuanya dengan benar:
Bagaimana cara menggunakan
Perintah merge
tidak mengandung fungsionalitas penutupan, karena untuk kasus pertama cabang akan dipalsukan dengan cepat , dan untuk yang kedua tidak akan melakukan apa-apa ( git already up to date
).
Agar tidak mengubah perilaku lama, pengembang memutuskan untuk memasukkan perintah untuk menutup:
git closure -s $source_commit -d $dest_commit -m $message
Argumen pertama -s $source_commit
menentukan hash dari commit untuk keluar, dan yang kedua, opsional -d $dest_commit
, menentukan komit di mana loop perlu ditutup. Jika tidak ada, maka penutupan terjadi di cabang check-out saat ini. Parameter -m $message
mengatur pesan penutupan, seperti failed feature, revert to origin
. Namun, opsi --allow-empty-message
juga tersedia, yang memungkinkan komit tanpa teks pesan. Secara default, Git memungkinkan tepat satu penutupan untuk beberapa komit. Untuk mengatasi batasan ini, opsi --allow-multiple-closures
.
Setelah perintah dieksekusi, git itu sendiri akan menghitung perubahan, dan pada komit akhir, double diff akan terlihat: dari base dan trailing branch. Secara umum, ini adalah perbedaan n-dimensi, yaitu, Anda dapat melakukan penutupan sebanyak yang Anda suka. closure-commit mirip dengan menggabungkan-komit dengan perbedaan bahwa ia menyimpan beberapa pesan, bukan satu.
Sayangnya, GUI yang ada untuk bekerja dengan Git belum sepenuhnya mendukung penutupan. Versi pratinjau GitExtensions membangun kurva seperti penggabungan bukan busur yang indah. Perhatikan Closure message
baru dan bidang Closure diff
:
Perlu dicatat bahwa tim closure
selalu mengubah sejarah (Git, sekarang Git adalah mesin waktu penuh!), Jadi sekarang Anda dapat --force
cabang hanya dengan opsi --force
, atau dengan opsi safe --force-with-lease
.
Rebase untuk cabang dengan loop juga tersedia, namun, logika penghitungan ulang komit di dalamnya rumit.
Selain itu, opsi auto
memungkinkan Anda untuk menutup semua cabang lama secara otomatis. Dalam hal ini, komit penutup adalah yang darinya percabangan dimulai. Menggunakan plugin untuk Git IDE, penutupan dapat dijalankan secara berkala. Di GitExtensions, plugin Hapus cabang yang serupa menghapus cabang yang sudah usang.
Opini perusahaan IT
Perusahaan IT besar: Google, Facebook, Apple, DeepMind, Positive Technologies, dan terutama Microsoft, berharap untuk penutupan, karena sekarang akan mungkin untuk memformalkan siklus hidup cabang, termasuk yang tidak berdekatan.
Salah satu manajer top Microsoft, Michael Richter, menulis :
Fitur baru dari git tentunya akan mengurangi kekacauan di dunia pengembangan Open Source dan tidak hanya. Gudang kami memiliki banyak cabang gantung. Sebagai contoh, ada lebih dari 200 dari mereka dalam vscode , dan ada lebih dari 300 dari mereka di TypeScript ! Dan ini bukan hanya masalah Microsoft. Penutupan tidak hanya meningkatkan organisasi, tetapi juga memungkinkan Anda untuk melacak alasan programmer, kadang-kadang benar-benar tidak dapat dipahami bahkan untuk kolega :) Penutupan mengingatkan saya pada film "Kembali ke Masa Depan" - di mana karakter bepergian ke masa lalu dan masa depan. Saya suka film ini, saya meninjaunya beberapa kali. Dan saya pikir saya akan lebih menyukai git karena ini :)
Catatan
Jika sebelumnya grafik komit adalah grafik asiklik terarah (DAG), maka penutupan memperluasnya ke grafik terarah umum. Dengan Git, akan dimungkinkan untuk mendeskripsikan ekspresi reguler di mana status dikomit, dan alfabet adalah himpunan semua pesan. Tapi ini menampar hub "pemrograman abnormal", dan karena itu berada di luar ruang lingkup artikel. Namun, jika Anda tertarik dengan ini, lihat artikel yang menjelaskan bagaimana Anda bisa menyimpan pohon keluarga di dalam Git.