GitHub Flow disebarkan ke produksi sebelum bergabung ke master: bukankah fitur kedua akan menimpa yang pertama?

8

Dalam pemahaman tentang GitHub Flow, seperti yang terlihat di sini , sebuah fitur, setelah review kode, pertama kali digunakan untuk produksi, kemudian digabung menjadi master.

Jika ada fitur kedua yang bercabang dari komit yang sama dengan fitur pertama, dan itu juga dikerahkan langsung ke produksi, maka produksi tidak akan lagi berisi fitur pertama.

Fitur pertama digabung menjadi master

dibuat di learngitbranching.js.org

Setelah c2 digunakan, bagaimana c3 dapat digunakan sebelum bergabung dengan c2 atau c4?

Bagaimana GitHub Flow menangani masalah ini?

Solusi yang jelas adalah dengan mengharuskan fitur harus diubah kembali ke master sebelum digunakan untuk produksi. Namun, ini rentan terhadap kesalahan manusia. Jika seseorang lupa untuk rebase, produksi sekarang kehilangan fitur.

Saya akan sangat menghargai jawaban dari mereka yang memiliki pengalaman menggunakan GitHub Flow. Bagaimana Anda tidak memiliki masalah ini?

DarkSigma
sumber

Jawaban:

1

Kabar baik! GitHub memiliki artikel tentang itu!

Mereka mengidentifikasi tiga langkah keamanan:

  • Pastikan itu lolos tes. Semoga ini adalah bagian dari sebagian besar alur kerja penempatan. Tapi, itu salah satu langkah "aman" yang mereka tekankan.
  • "Kunci" pipa penyebaran sesuai kebutuhan: Ketika cabang fitur sedang dikerahkan atau diverifikasi pada produksi, tidak ada orang lain yang bisa memulai penyebaran.
  • Pastikan bahwa setiap cabang yang digunakan berisi setiap set perubahan yang sudah digunakan. Bagaimana ini dilakukan sedikit lebih rumit. Inilah yang mereka katakan:

Kami menggunakan API GitHub untuk memverifikasi persyaratan ini. Titik akhir pada aplikasi github.com memperlihatkan SHA1 yang saat ini berjalan dalam produksi. Kami mengirimkan ini ke GitHub bandingkan API untuk mendapatkan "basis gabungan", atau leluhur bersama, dari master dan SHA1 produksi. Kami kemudian dapat membandingkan ini dengan cabang yang kami coba gunakan untuk memeriksa apakah cabang tersebut menyusul. Dengan menggunakan leluhur umum dari master dan produksi, kode yang hanya ada pada cabang dapat dihapus dari produksi, dan perubahan yang telah mendarat pada master tetapi belum dikerahkan belum akan memerlukan cabang untuk menggabungkan mereka sebelum digunakan.

Jika ternyata cabang ada di belakang, master digabung ke dalamnya secara otomatis. Kami melakukan ini menggunakan ergMerging API✨ baru yang kami sediakan hari ini. Penggabungan ini memulai pembangunan CI baru seperti acara gaya dorong lainnya, yang memulai penerapan saat dilewati.

API penggabungan pada dasarnya melakukan penggabungan standar - tetapi melakukannya di sisi server.

Solusi Anda mungkin tidak perlu begitu canggih. Pada akhirnya, Anda hanya perlu kepastian yang masuk akal bahwa:

  • Tes lulus
  • Hanya satu orang yang menyebarkan pada satu waktu
  • Master digabung menjadi cabang fitur sebelum penyebaran
svidgen
sumber
Tim saya memutuskan untuk bergabung menjadi master sebelum melakukan produksi. Tidak ada cabang yang digabung menjadi master kecuali jika didasarkan pada master. Setelah penggabungan, semua cabang yang tidak digabungkan lainnya (fitur masih dalam proses) harus rebase ke master sebelum mereka memenuhi syarat untuk review kode, pengujian (manual dan skrip), dan akhirnya menggabungkan ke master. Setelah fitur di master, itu seperti di prod, karena master dapat digunakan kapan saja.
DarkSigma
Sepertinya ide yang buruk untuk menyebarkan aplikasi ke Production yang belum digabung dengan cabang utama. Anda akan berpikir jika Anda memindahkannya ke Produksi, Anda telah menguji perubahan di lingkungan pengujian. Jika gagal di Prod, cukup putar kembali ke rilis sebelumnya. Saya yakin Github memiliki alasan, tetapi sepertinya banyak pekerjaan tambahan dan dapat mengarah pada situasi di mana Anda tidak tahu apa yang sebenarnya ada di Produksi. Penggabungan ke master tidak selalu berjalan dengan baik jika ada konflik, sehingga Anda dapat memiliki kode di Prod yang tidak sesuai dengan yang Anda inginkan ...
Erik Pearson
@ ErikPearson Saya pikir idenya adalah bahwa Anda harus setidaknya memiliki master bergabung ke dalam cabang fitur terlebih dahulu. Sistem build Anda seharusnya tidak memungkinkan Anda untuk menyebarkan cabang yang tidak bisa dipindahkan. ... Berspekulasi, tentu saja. Saya sebenarnya tidak menggunakan alur kerja ini. Tapi, itu tidak tampak mengerikan bagi saya dengan alat yang tepat .
svidgen
0

Apakah masalah ini terjadi pada Anda atau ini pertanyaan teoretis?

Git "cukup pintar" ketika bergabung hanya untuk mendorong kode yang diubah, jika ada "masalah" itu akan memberi Anda konflik gabungan.

Setiap fitur baru didasarkan pada pengembangan cabang kami tidak mendasarkan fitur pada fitur lainnya.

Satu hal yang kami lakukan untuk meminimalkan konflik gabungan adalah sering bergabung dan sebelum Anda memulai fitur, selalu tarik pengembangan terbaru. (kami tidak pernah berkomitmen untuk menguasai tetapi selalu untuk mengembangkan cabang, yang akan digabungkan sesekali ke cabang master)

Pieter B
sumber
2
Anda salah paham pertanyaan saya. Ini bukan tentang merger-konflik, dan tidak ada pengembangan cabang. Saya bertanya tentang aliran Git Hub (lihat tautan). Tim saya ingin menggunakan alur kerja ini, tetapi tidak mengerti mengapa kami akan menggunakan fitur yang tidak digabungkan. Namun itu tampaknya menjadi inovasi dari aliran ini
DarkSigma
Selalu ada cabang yang berkembang. Tampaknya Anda memanggil cabang berkembang Anda "master".
gnasher729