Di tim kami, selain unit kerja individu (Cerita), kami memiliki tema kerja yang lebih lama (Epos). Banyak cerita menjadi epik.
Secara tradisional, kami memiliki cabang fitur untuk setiap Story, dan menggabungkan yang langsung dikuasai ketika mereka melewati QA. Namun, kami ingin mulai menahan rilis cerita yang diselesaikan dalam Epic sampai Epic dianggap "fitur selesai". Kami hanya akan merilis fitur-fitur ini untuk produksi ketika seluruh Epic ditutup. Selain itu, kami memiliki server build malam - kami ingin semua Cerita yang tertutup (termasuk yang merupakan bagian dari Epics tidak lengkap) untuk disebarkan ke server malam ini secara otomatis.
Adakah saran tentang bagaimana mengelola repo kami untuk mencapai ini? Saya telah mempertimbangkan untuk memperkenalkan "cabang epik", tempat kami menggabungkan cerita tertutup ke cabang epik terkait alih-alih langsung dikuasai, tetapi kekhawatiran saya adalah:
- Saya khawatir tentang konflik gabungan yang mungkin muncul jika cabang epik tetap terbuka lama
- Bangun malam akan membutuhkan penggabungan semua cabang epik menjadi cabang "bangun malam". Sekali lagi, menggabungkan konflik dapat muncul, dan ini harus dilakukan secara otomatis
sumber
devel
kami telah beralih ke CMake dari Autotools, telah memperkenalkan Travis CI, kode ulang. Pada akhirnya lebih mudah untuk memahami fitur baru dan menerapkannya secara manualdevel
daripada mencoba untuk menggabungkannya. Kami juga meminta siswa Master baru untuk mengembangkan fitur baru di cabang yang mereka cabut ketika mereka memulai tesis mereka. Setelah satu tahun mereka mendorongnya dan tidak ada upaya untuk mendapatkannya kembali, jadi semakin sulit untuk bergabung hari demi hari.Saya pikir ini adalah masalah yang cukup umum dan bermuara pada memilih fitur yang akan disertakan dalam rilis setelah fitur dikodekan daripada sebelumnya.
misalnya.
Saya memiliki fitur A, B dan C untuk v2 produk saya. B dan C terkait, saya tidak ingin melepaskan B kecuali C juga selesai.
Saya memiliki tiga pengembang semua bekerja pada saat yang sama pada fitur-fiturnya.
Saya Memiliki satu set tanggal rilis batu D
B selesai dan bergabung, A selesai dan bergabung. C ditunda ... apa yang harus saya lakukan ?!
Saya tidak percaya ada solusi teknis untuk masalah ini. Anda ingin merilis versi produk yang belum diuji dengan hanya menyertakan fitur A. Kecuali jika Anda menggabungkan dan menguji semua kemungkinan kombinasi fitur, ini akan selalu menjadi kemungkinan.
Solusinya lebih manusiawi. Anda telah melewatkan tanggal rilis Anda dan harus mendorongnya kembali.
sumber
Ini adalah masalah yang sulit tetapi satu yang dihadapi banyak orang. Saya lebih suka menggunakan pengaturan Gitflow sebagai titik awal.
Pengembangan -> Hal-hal baru sedang dikerjakan pada
Guru -> Barang-barang jadi yang membutuhkan pengujian Produksi -> Barang-barang yang telah diterbitkan untuk produksi.
Pada fitur minor (lebih pendek) saya membuat cabang dari pengembangan melakukan pekerjaan di sana kemudian menggabungkan cabang kembali ke pengembangan.
Pada fitur-fitur utama (jangka panjang) saya membuat cabang dari pengembangan, membuat cabang yang lebih kecil dari cabang itu, kemudian bergabung kembali ke cabang pertama. Setelah fitur utama selesai, lalu kembali ke cabang pengembangan.
Secara berkala (tergantung pada proyek) saya menggabungkan pengembangan kembali ke master dan siklus pengujian dimulai. Jika ada perbaikan muncul dalam pengujian mereka dilakukan di cabang utama (cabang pembantu kemudian bergabung). Dan pengembangan dapat dilanjutkan pada cabang master selama pengujian.
Kapan saja master harus digabung ke dalam pengembangan, dan pengembangan harus digabung ke salah satu dari cabang pembantu jangka panjangnya.
master harus selalu (secara teori) siap untuk produksi. Pembangunan harus selalu (secara teori) siap untuk produksi. Satu-satunya alasan ada perbedaan untuk menyediakan serangkaian fitur yang solid untuk diuji oleh penguji.
Ketika siap, komit master yang diuji digabung ke dalam produksi dan penyebaran dalam produksi terjadi dari cabang itu. HOTFIX yang perlu dilakukan dalam keadaan darurat kemudian dapat terjadi di cabang Produksi tanpa harus bergabung dalam master (yang mungkin memiliki banyak perubahan yang belum diuji).
Seperti pohon normal saya
Ini adalah aturan umum saya bahwa tidak ada perubahan tunggal yang akan memakan waktu lebih dari beberapa jam. Jika ya maka perlu dibuat perubahan yang lebih kecil. Jika ini adalah fitur yang sangat besar (seperti UI menulis ulang) maka itu akan berjalan dalam jangka panjang sehingga perkembangan normal dapat berlanjut pada saat yang sama. Cabang-cabang LongTerm biasanya hanya cabang-cabang lokal sementara Development, Master, dan Production adalah cabang-cabang terpencil. Setiap cabang pembantu juga hanya lokal. Ini menjaga repositori tetap bersih untuk orang lain, tanpa menghilangkan kegunaan git pada set fitur jangka panjang.
Saya ingin mencatat, bagaimanapun, bahwa keberadaan cabang jangka panjang adalah hal yang langka. Biasanya, semua pekerjaan saya dalam pengembangan. Hanya ketika saya memiliki fitur (set) yang akan memakan waktu begitu lama sehingga saya harus dapat mengerjakan hal-hal dev yang normal juga, saya menggunakan cabang LongTerm. Jika itu hanya satu set perubahan yang harus bersama maka saya hanya tidak bergabung untuk menguasai sampai semua selesai.
sumber