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
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
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.