Perbarui 2019:
Saat ini, pertanyaannya akan dilihat dalam konteks menggunakan Git, dan 10 tahun penggunaan alur kerja pengembangan terdistribusi (terutama berkolaborasi melalui GitHub ) menunjukkan praktik terbaik umum:
master
adalah cabang yang siap untuk diterapkan ke produksi kapan saja: rilis berikutnya, dengan sekumpulan cabang fitur yang dipilih digabungkan master
.
dev
(atau cabang integrasi, atau ' next
') adalah cabang tempat cabang fitur yang dipilih untuk rilis berikutnya diuji bersama
maintenance
(atau hot-fix
) branch adalah cabang untuk evolusi rilis saat ini / perbaikan bug, dengan kemungkinan penggabungan kembali ke dev
dan ataumaster
Alur kerja semacam itu (di mana Anda tidak menggabungkan dev
ke master
, tetapi di mana Anda hanya menggabungkan cabang fitur ke dev
, kemudian jika dipilih, ke master
, agar dapat dengan mudah melepaskan cabang fitur yang belum siap untuk rilis berikutnya) diimplementasikan di Git repo itu sendiri, dengan gitworkflow (satu kata, diilustrasikan di sini ).
Lihat lebih lanjut di rocketraman/gitworkflow
. Sejarah melakukan ini vs Pengembangan Berbasis Batang dicatat dalam komentar dan diskusi artikel ini oleh Adam Dymitruk .
(sumber: Gitworkflow: A Task-Oriented Primer )
Catatan: dalam alur kerja terdistribusi tersebut, Anda dapat melakukan kapan pun Anda mau dan mendorong ke cabang pribadi beberapa WIP (Work In Progress) tanpa masalah: Anda akan dapat mengatur ulang (git rebase) komitmen Anda sebelum menjadikannya bagian dari cabang fitur.
Jawaban asli (Okt. 2008, 10+ tahun yang lalu)
Itu semua tergantung pada sifat urutan manajemen rilis Anda
Pertama, apakah semua yang ada di bagasi Anda benar-benar untuk rilis berikutnya ? Anda mungkin mengetahui bahwa beberapa fungsi yang saat ini dikembangkan adalah:
- terlalu rumit dan masih perlu disempurnakan
- tidak siap pada waktunya
- menarik tetapi tidak untuk rilis berikutnya ini
Dalam kasus ini, trunk harus berisi upaya pengembangan saat ini, tetapi cabang rilis yang ditentukan lebih awal sebelum rilis berikutnya dapat berfungsi sebagai cabang konsolidasi di mana hanya kode yang sesuai (divalidasi untuk rilis berikutnya) yang digabungkan, kemudian diperbaiki selama fase homologasi, dan akhirnya dibekukan saat mulai diproduksi.
Dalam hal kode produksi, Anda juga perlu mengelola cabang tambalan Anda , sambil mengingat bahwa:
- set tambalan pertama mungkin benar-benar dimulai sebelum rilis pertama ke produksi (artinya Anda tahu bahwa Anda akan masuk ke produksi dengan beberapa bug yang tidak dapat diperbaiki tepat waktu, tetapi Anda dapat memulai pekerjaan untuk bug tersebut di cabang terpisah)
- cabang patch lainnya akan memiliki kemewahan untuk memulai dari label produksi yang terdefinisi dengan baik
Ketika datang ke cabang dev, Anda dapat memiliki satu trunk, kecuali jika Anda memiliki upaya pengembangan lain yang perlu Anda lakukan secara paralel seperti:
- refactoring besar-besaran
- pengujian pustaka teknis baru yang mungkin mengubah cara Anda memanggil sesuatu di kelas lain
- awal dari siklus rilis baru di mana perubahan arsitektural penting perlu digabungkan.
Sekarang, jika siklus pengembangan-rilis Anda sangat berurutan, Anda dapat pergi seperti yang disarankan jawaban lain: satu trunk dan beberapa cabang rilis. Itu berfungsi untuk proyek-proyek kecil di mana semua pengembangan pasti akan masuk ke rilis berikutnya, dan hanya dapat dibekukan dan berfungsi sebagai titik awal untuk cabang rilis, tempat tambalan dapat dilakukan. Itu adalah proses nominalnya, tetapi segera setelah Anda memiliki proyek yang lebih kompleks ... itu tidak cukup lagi.
Untuk menjawab komentar Ville M.:
- Perlu diingat bahwa cabang dev tidak berarti 'satu cabang per pengembang' (yang akan memicu 'kegilaan penggabungan', di mana setiap pengembang harus menggabungkan pekerjaan lain untuk melihat / mendapatkan pekerjaan mereka), tetapi satu cabang dev per pengembangan upaya.
- Ketika upaya tersebut perlu digabungkan kembali ke dalam trunk (atau cabang "utama" atau rilis lainnya yang Anda tentukan), ini adalah pekerjaan pengembang, bukan - saya ulangi, BUKAN - Manajer SC (yang tidak akan tahu cara menyelesaikannya) penggabungan yang bertentangan). Pemimpin proyek dapat mengawasi penggabungan, yang berarti memastikan penggabungan dimulai / selesai tepat waktu.
- siapa pun yang Anda pilih untuk benar-benar melakukan penggabungan, yang terpenting adalah:
- agar memiliki pengujian unit dan / atau lingkungan perakitan tempat Anda dapat menerapkan / menguji hasil penggabungan.
- untuk menentukan tag sebelum awal penggabungan agar dapat kembali ke keadaan sebelumnya jika penggabungan tersebut terbukti terlalu rumit atau agak lama untuk diselesaikan.