Jawabannya bergantung pada ukuran tim Anda dan kualitas kontrol sumber Anda dan kemampuan untuk menggabungkan kumpulan perubahan kompleks dengan benar. Misalnya dalam kontrol sumber cabang penuh seperti penggabungan CVS atau SVN bisa jadi sulit dan Anda mungkin lebih baik dengan model pertama, sementara jika menggunakan sistem yang lebih kompleks seperti IBM ClearCase dan dengan ukuran tim yang lebih besar Anda bisa lebih baik dengan model kedua. model atau kombinasi keduanya.
Saya pribadi akan memisahkan model cabang fitur, di mana setiap fitur utama dikembangkan pada cabang terpisah, dengan sub-cabang tugas untuk setiap perubahan yang dilakukan oleh pengembang individu. Saat fitur stabil, fitur tersebut digabungkan ke trunk, yang Anda pertahankan agar cukup stabil dan melewati semua uji regresi setiap saat. Saat Anda mendekati akhir siklus rilis dan semua cabang fitur bergabung, Anda menstabilkan dan mencabangkan cabang sistem rilis tempat Anda hanya melakukan perbaikan bug stabilitas dan backport yang diperlukan, sementara trunk digunakan untuk pengembangan rilis berikutnya dan Anda lagi bercabang untuk cabang fitur baru. Dan seterusnya.
Dengan cara ini trunk selalu berisi kode terbaru, tetapi Anda berhasil menjaganya tetap stabil, membuat label (tag) yang stabil pada perubahan besar dan penggabungan fitur, cabang fitur adalah pengembangan yang serba cepat dengan integrasi berkelanjutan dan tugas individu sub-cabang dapat sering disegarkan dari cabang fitur agar semua orang yang mengerjakan fitur yang sama tetap sinkron, sekaligus tidak memengaruhi tim lain yang mengerjakan fitur yang berbeda.
Pada saat yang sama Anda telah melalui sejarah serangkaian cabang rilis, di mana Anda dapat memberikan backport, dukungan dan perbaikan bug untuk pelanggan Anda yang karena alasan apapun tetap menggunakan versi produk Anda sebelumnya atau bahkan hanya versi rilis terbaru. Seperti halnya trunk, Anda tidak menyiapkan integrasi berkelanjutan pada cabang rilis, mereka diintegrasikan secara hati-hati setelah melewati semua uji regresi dan kontrol kualitas rilis lainnya.
Jika karena alasan tertentu dua fitur saling bergantung dan memerlukan perubahan yang dilakukan oleh satu sama lain, Anda dapat mempertimbangkan untuk mengembangkan keduanya pada cabang fitur yang sama atau meminta fitur untuk secara teratur menggabungkan bagian kode yang stabil ke trunk dan kemudian menyegarkan perubahan dari trunk untuk bertukar kode antar cabang trunk. Atau jika Anda perlu memisahkan kedua fitur tersebut dari yang lain, Anda dapat membuat cabang umum yang Anda gunakan untuk membuat cabang fitur tersebut dan yang dapat Anda gunakan untuk bertukar kode di antara fitur-fitur tersebut.
Model di atas tidak masuk akal dengan tim di bawah 50 pengembang dan sistem kontrol sumber tanpa cabang yang jarang dan kemampuan penggabungan yang tepat seperti CVS atau SVN, yang hanya akan membuat keseluruhan model ini menjadi mimpi buruk untuk disiapkan, dikelola, dan diintegrasikan.