Saya telah memperhatikan sesuatu belakangan ini melihat beberapa proyek populer di GitHub, bahwa tidak ada develop
cabang. Dan pada kenyataannya, panduan GitHub Flow tidak menyebutkannya juga. Dari pemahaman saya, master
harus selalu benar-benar stabil dan mencerminkan produksi. Jika pengembang bekerja pada cabang fitur, dan kemudian menggabungkannya ke dalam master
ketika mereka selesai, itu berarti ada periode waktu di mana fitur / perbaikan sedang digabungkan ke dalam master
dan master
cabang sebenarnya lebih baru dari produksi.
Bukankah lebih masuk akal untuk membuat tim membuat fitur / memperbaiki cabang develop
, bergabung kembali ke dalamnya , dan kemudian ketika versi berikutnya benar-benar siap untuk rilis, develop
digabungkan ke dalam master
dan tag dibuat? Bayangkan jika orang bergabung langsung master
, dan bug dilaporkan dalam produksi yang menjadi sulit diperbaiki karena master
basis kode cabang telah berubah secara signifikan. Kemudian para devs hanya perlu memberitahu pengguna untuk menunggu sampai rilis berikutnya untuk melihat masalah terselesaikan.
EDIT: Pertanyaan ini berbeda dari "ke cabang atau tidak ke cabang". Ini secara khusus membahas orang-orang yang pindah dari menggunakan cabang pengembangan dan alasan di sekitarnya, karena itu disebut-sebut sebagai praktik terbaik untuk waktu yang lama.
Jawaban:
Itu berasal dari pola pikir CI di mana ada integrasi beberapa kali sehari.
Ada pro dan kontra dari keduanya.
Di tim kami, kami telah meninggalkan cabang pengembangan juga karena kami merasa itu tidak memberikan manfaat tambahan selain beberapa kekurangan. Kami telah mengkonfigurasi perangkat lunak CI kami (Teamcity) untuk mengkompensasi kekurangannya:
Alasan ini berfungsi adalah karena semua permintaan tarik mengandung kode yang berpotensi dapat dirilis tetapi ini tidak berarti kami menyebarkan semua komit secara master.
Alasan utama kami meninggalkan cabang pengembangan adalah karena ia cenderung menjadi terlalu besar dan terlalu memakan waktu untuk melihat apa yang sebenarnya terkandung di dalamnya. Jika kami telah menerapkan sesuatu yang sedikit sebelum waktunya, kami hanya cabang dari cabang perbaikan terbaru dan menyebarkannya secara langsung.
sumber
master
, jadi Anda jika bug muncul kemudian saatmaster
dalam keadaan fluks, Anda dapat dengan mudah memisahkan perbaikan terbaru dari tag 1.3?Kembangkan cabang lebih penting jika proses Anda untuk merilis rumit dan Anda perlu memiliki kandidat rilis yang serius.
Misalnya, bayangkan Anda sedang menulis perangkat lunak yang merupakan firmware pada mobil. Ini adalah ... non-sepele untuk diperbaiki dan kemungkinan rilis apa pun akan memiliki serangkaian uji non-CI / integrasi komprehensif yang dijalankan pada perangkat keras nyata.
Dalam hal itu mungkin lebih masuk akal untuk mengisolasi "kandidat pelepas" di cabang non-master (seperti "berkembang"). Itu memungkinkan tim Anda menjalankan tes tersebut untuk memiliki cabang untuk menggabungkan fitur.
Webapps atau perangkat lunak lain yang mudah diperbarui tidak memiliki batasan ini.
Namun, perhatikan bahwa:
sumber
Ada dua filosofi yang pernah saya lihat di proyek, dan saya pikir pilihannya hanya masalah selera:
Tunjuk 'master' sebagai rilis produksi dan kembangkan di cabang 'kembangkan'.
Berkembang di 'master' dan memiliki cabang dengan nama berbeda untuk rilis produksi yang stabil. Ini lebih masuk akal jika proyek Anda memiliki beberapa cabang rilis sekaligus (mis., Yang saat ini disukai adalah Rilis-1.8, tetapi Anda juga masih mempertahankan Rilis-1.7).
Keduanya merupakan pendekatan umum, dan memiliki pro dan kontra.
sumber
Rilis untuk produksi dapat ditandai, sehingga situasi yang dirilis selalu dapat direproduksi tanpa mengabdikan seluruh cabang untuk tujuan ini.
Jika bug kritis ditemukan dalam produksi pada saat master tidak dapat dirilis, maka cukup mudah untuk checkout tag dan memulai cabang "hotfix-for-release-1.2.0" baru dari sana. Tapi itu seharusnya agak jarang.
Sebagian besar waktu dalam aplikasi web kami, master telah berubah sejak rilis terakhir tetapi tidak terlalu signifikan, jadi kami hanya dapat melakukan rilis baru dari master yang memiliki perbaikan. Ini membantu untuk melakukan rilis yang sangat sering.
sumber
Itu bukan Github Flow.
Ini adalah proses penyebaran / penggabungan Github Flow, sesuai dengan tautan Anda:
(Penekanan milikku)
Dengan kata lain,
master
tidak akan pernah di depan produksi. Demikian pula,master
akan selalu berada dalam keadaan stabil dan dapat dilepas (selain dari bug yang belum ditemukan), karena semuanya ditinjau, diuji, dan diluncurkan ke produksi sebelum digabungkanmaster
.sumber
master
selalu posisi rollback Anda jika cabang fitur yang Anda dorong ke dalam produksi gagal. Jika tidak, itu akan bergabungmaster
dan menjadi fallback baru. Saya suka itu.Masalah yang saya lihat adalah bahwa Git / Hub flow deploy / merge mengasumsikan satu fitur sedang dikembangkan / diuji / digabung / disebarkan pada suatu waktu - dan seringkali dalam pengalaman saya hal ini tidak terjadi. Jika kami menggabungkan fitur pada satu waktu, ada peluang lebih besar untuk masalah regresi - hanya ditemukan setelah fitur tersebut digabungkan untuk dikuasai dan kemungkinan dalam produksi.
Perlu ada cara untuk menguji beberapa fitur, menggabungkan beberapa fitur dan menggunakan yang sama. Saya telah menggunakan 'cabang bundel' (cabang yang dibuat dari master dengan cabang fitur siap pakai digabung ke dalamnya) yang akan digunakan untuk qa / uat. Koreksi selama uat terjadi hanya pada cabang fitur, dan yang digabung kembali ke cabang bundel. Setelah subbagian dari cabang bundel disetujui, hanya fitur-fitur yang disetujui dalam bundel yang dapat diminta untuk dikuasai tarikan - dan siklusnya berkelanjutan.
Saya menggunakan ini dengan Gitflow, tetapi merenungkan untuk menggunakannya untuk aliran GitHub. Fitur QA / UAT banyak pada masalah waktu tampaknya penting. Masalah lain dengan aliran GitHub adalah mengasumsikan semua pengembang sr, dan itu tidak selalu terjadi.
Saya lebih suka menggunakan aliran GitHub karena kesederhanaannya. Dengan fitur seperti bundel, saya pikir ini akan lebih siap. Mungkin bundel ini mirip dengan rilis; Namun, saya masih memikirkan ini juga.
Masalah lainnya adalah proses permintaan tarik terjadi di akhir sebelum bergabung menjadi master; namun, terkadang Anda ingin mengkodekan ulasan sebelum pengujian qa bisnis - karenanya jauh sebelum penggabungan
sumber