Cevap, ekibinizin büyüklüğüne ve kaynak kontrolünüzün kalitesine ve karmaşık değişim setlerini doğru bir şekilde birleştirme yeteneğine bağlıdır. Örneğin, CVS veya SVN birleştirme gibi tam şube kaynak denetiminde zor olabilir ve ilk modelle daha iyi durumda olabilirsiniz, IBM ClearCase gibi daha karmaşık bir sistem kullanıyorsanız ve daha büyük bir ekip ile ikinci modelle daha iyi olabilirsiniz. model veya ikisinin bir kombinasyonu.
Kişisel olarak, her bir ana özelliğin ayrı bir dalda geliştirildiği özellik dalı modelini, her bir geliştirici tarafından yapılan her değişiklik için görev alt dallarıyla ayırırdım. Özellikler stabilize edildikçe, makul ölçüde sabit tuttuğunuz ve her zaman tüm regresyon testlerini geçtiğiniz gövdeyle birleştirilirler. Sürüm döngünüzün sonuna yaklaştığınızda ve tüm özellik dalları birleştikçe, gövde bir sonraki sürümün geliştirilmesi için kullanılırken, üzerinde yalnızca kararlılık hata düzeltmelerini ve gerekli arka yuvaları yaptığınız bir sürüm sistemi dalını stabilize eder ve dallandırırsınız. yeni özellik dalları için dallanma. Ve bunun gibi.
Bu şekilde, gövde her zaman en son kodu içerir, ancak onu makul ölçüde kararlı tutmayı, büyük değişiklikler ve özellik birleştirmelerinde kararlı etiketler (etiketler) oluşturmayı başarırsınız, özellik dalları, sürekli entegrasyon ile hızlı tempolu geliştirmelerdir ve bireysel görev alt dalları genellikle olabilir Farklı özellikler üzerinde çalışan diğer ekipleri etkilemeden aynı anda herkesin aynı özellik üzerinde çalışmasını sağlamak için özellik dalından yenilenmiştir.
Aynı zamanda, geçmişte, herhangi bir nedenle ürününüzün önceki sürümlerinde veya hatta en son yayınlanan sürümünde kalan müşterileriniz için arka plan, destek ve hata düzeltmeleri sağlayabileceğiniz bir dizi sürüm şubesine sahipsiniz. Ana hatta olduğu gibi, sürüm dalları üzerinde sürekli entegrasyon kurmazsınız, bunlar tüm regresyon testlerini ve diğer sürüm kalite kontrollerini geçtikten sonra dikkatlice entegre edilir.
Herhangi bir nedenle iki özellik birbirine bağımlıysa ve birbirleri tarafından değişiklik yapılması gerekiyorsa, ya aynı özellik dalında geliştirmeyi ya da özelliklerin düzenli olarak kodun kararlı bölümlerini ana hat ile birleştirmesini ve ardından değişiklikleri yenilemesini gerektirmeyi düşünebilirsiniz. gövde dalları arasında kod alışverişi yapmak için gövde. Ya da bu iki özelliği diğerlerinden ayırmanız gerekirse, bu özellik dallarını ayırdığınız ve özellikler arasında kod alışverişi yapmak için kullanabileceğiniz ortak bir dal oluşturabilirsiniz.
Yukarıdaki model, 50 geliştirici ve kaynak kontrol sistemi altındaki ekipler için seyrek şubeler ve CVS veya SVN gibi uygun birleştirme kabiliyeti olmayan ekipler için pek mantıklı değil, bu da tüm bu modeli kurulum, yönetme ve entegre etme için bir kabusa çevirir.