Câu trả lời phụ thuộc vào quy mô nhóm của bạn và chất lượng kiểm soát nguồn của bạn và khả năng hợp nhất các bộ thay đổi phức tạp một cách chính xác. Ví dụ, trong kiểm soát toàn bộ nguồn chi nhánh như CVS hoặc SVN hợp nhất có thể khó khăn và bạn có thể tốt hơn với mô hình đầu tiên, trong khi nếu sử dụng hệ thống phức tạp hơn như IBM ClearCase và với quy mô nhóm lớn hơn, bạn có thể tốt hơn với mô hình thứ hai mô hình hoặc sự kết hợp của cả hai.
Cá nhân tôi sẽ tách riêng mô hình nhánh tính năng, trong đó mỗi tính năng chính được phát triển trên một nhánh riêng biệt, với các nhánh con nhiệm vụ cho mỗi thay đổi do nhà phát triển cá nhân thực hiện. Khi các tính năng ổn định, chúng sẽ được hợp nhất với thân cây, bạn sẽ giữ ổn định hợp lý và vượt qua tất cả các bài kiểm tra hồi quy mọi lúc. Khi bạn gần kết thúc chu kỳ phát hành của mình và tất cả các nhánh tính năng hợp nhất, bạn ổn định và phân nhánh nhánh hệ thống phát hành mà trên đó bạn chỉ thực hiện sửa lỗi ổn định và các cổng hỗ trợ cần thiết, trong khi thân cây được sử dụng để phát triển bản phát hành tiếp theo và bạn lại rẽ nhánh cho các nhánh tính năng mới. Và như thế.
Theo cách này, thân cây luôn chứa mã mới nhất, nhưng bạn quản lý để giữ cho nó ổn định một cách hợp lý, tạo các nhãn (thẻ) ổn định về những thay đổi lớn và hợp nhất tính năng, các nhánh tính năng phát triển với tốc độ nhanh với sự tích hợp liên tục và các nhánh phụ nhiệm vụ riêng lẻ có thể thường xuyên được làm mới từ nhánh tính năng để đồng bộ hóa mọi người làm việc trên cùng một tính năng, đồng thời không ảnh hưởng đến các nhóm khác đang làm việc trên các tính năng khác nhau.
Đồng thời, bạn có trong lịch sử một tập hợp các chi nhánh phát hành, nơi bạn có thể cung cấp các bản báo cáo, hỗ trợ và sửa lỗi cho khách hàng của mình, những người vì bất kỳ lý do gì vẫn sử dụng các phiên bản trước của sản phẩm hoặc thậm chí chỉ là phiên bản mới nhất được phát hành. Giống như thân cây, bạn không thiết lập tích hợp liên tục trên các nhánh phát hành, chúng được tích hợp cẩn thận khi vượt qua tất cả các bài kiểm tra hồi quy và kiểm soát chất lượng phát hành khác.
Nếu vì lý do nào đó mà hai tính năng cùng phụ thuộc và cần thay đổi lẫn nhau, bạn có thể cân nhắc phát triển cả hai tính năng trên cùng một nhánh tính năng hoặc yêu cầu các tính năng thường xuyên hợp nhất các phần ổn định của mã vào trung kế và sau đó làm mới các thay đổi từ thân cây để trao đổi mã giữa các nhánh thân cây. Hoặc nếu bạn cần tách biệt hai tính năng đó với những tính năng khác, bạn có thể tạo một nhánh chung mà bạn phân nhánh các nhánh tính năng đó và bạn có thể sử dụng để trao đổi mã giữa các tính năng.
Mô hình trên không có nhiều ý nghĩa với các nhóm dưới 50 nhà phát triển và hệ thống kiểm soát nguồn không có chi nhánh thưa thớt và khả năng hợp nhất thích hợp như CVS hoặc SVN, điều này sẽ khiến toàn bộ mô hình này trở thành cơn ác mộng để thiết lập, quản lý và tích hợp.