2013-07-15 31 views
7

Chúng tôi đã áp dụng mô hình phân nhánh được đề xuất bởi Vincent Driessen và chúng tôi thực hiện gần như mọi thứ như ông đã mô tả trong số article của mình.Tại sao hợp nhất các chi nhánh tính năng vào các nhánh phát hành là một ý tưởng tồi?

Chỉ khi nói đến xử lý các nhánh phát hành, chúng tôi lệch một chút.

Vincent đề xuất phát triển các tính năng trong các nhánh được phân nhánh từ nhà phát triển. Khi quyết định các tính năng nào được đưa vào bản phát hành tiếp theo, chúng sẽ được hợp nhất trở lại vào nhà phát triển và một nhánh phát hành được tạo ra từ nó.

Sau đó, chi nhánh tính năng chỉ nên được sử dụng để thử nghiệm và sửa lỗi. Khi bản phát hành được triển khai để phát hành, chi nhánh phát hành sẽ được hợp nhất trở lại với nhà phát triển và chủ.

Chúng tôi làm gì thay vì là để hợp nhất các tính năng trực tiếp vào chi nhánh phát hành: realease branch modelling

Tôi cảm thấy rằng đây không phải là cách nó nên được thực hiện và tôi đang cố gắng để nghĩ đến trường hợp này thực sự có thể làm cho mọi thứ phức tạp hơn.

Một tôi có thể nghĩ ra như sau:

Hãy nói rằng một Tính năng mới c được xây dựng dựa trên Feature một, mà đã được sáp nhập vào một chi nhánh phát hành. Trước tiên, tôi phải hợp nhất chi nhánh phát hành vào nhà phát triển để có thể tạo chi tiết mới Chi tiết c từ nhà phát triển.

Có trường hợp nào khác mà mô hình phân nhánh này có thể khiến mọi việc phức tạp hơn không?

+0

@downvoters vui lòng để lại nhận xét để cải thiện chất lượng câu hỏi của tôi :) Tiêu đề có gây hiểu lầm không? – Zounadire

+0

Thành thật mà nói, trả lời "Làm thế nào mô hình này có thể làm cho mọi thứ trở nên phức tạp?" giống như trả lời "Có thể mã hóa sai trong Java?" Mô hình này là nhiều hơn hoặc ít tiền phạt, trừ khi bạn thư giãn các giả định của nó về cam kết ngược dòng và hạ lưu và cơ sở hợp nhất. Nhưng sau đó một lần nữa, đó là sự thật của * mọi mô hình phân nhánh *. – Christopher

Trả lời

7

Một trường hợp tôi có thể nghĩ đến, điều này có thể khiến mọi việc trở nên phức tạp là nó sẽ bắt đầu chặn phát triển hơn nữa.

Cân nhắc bạn đang phát triển một tính năng A, tính năng này sẽ ngay lập tức trên bản phát hành tiếp theo của bạn. Bây giờ có một nhóm phát triển khác sẽ làm việc trên tính năng B, phụ thuộc nhiều vào tính năng A, nhưng nó chỉ cần được phát hành sau một vài lần chạy nước rút. Vì vậy, rõ ràng chúng tôi sẽ phân nhánh tính năng B từ tính năng A.

Bây giờ, bạn tìm thấy lỗi trong tính năng A, bản phát hành của bạn cho tính năng A đang tiến gần đến mức, bạn có hai tùy chọn sửa nóng/hack hoặc thích hợp mã lại yếu tố và sửa chữa.

Với thời gian như ràng buộc, khôn ngoan của nó để có sửa chữa nóng, nhưng xem xét tương lai chúng ta cần tái yếu tố và sửa chữa.

Tin vui là chúng tôi có thể thực hiện cả hai.

Với chiến lược của bạn (từ những gì tôi hiểu) chi nhánh phát hành của bạn, sẽ nhận được tất cả các bản vá và sửa lỗi nóng (chứa 5+ cam kết) vì bạn không thể cam kết bất cứ điều gì giống như tính năng A (nếu bạn nghiêm ngặt chính sách). Hãy xem xét số lượng bản phát hành bản sửa lỗi như vậy sẽ có nếu bạn có hơn 10 tính năng cùng một lúc. Tuy nhiên, với chiến lược của Vincent Driessen, luôn có một nhánh phát triển giữa tính năng và bản phát hành của bạn, do đó, bạn có thể hợp nhất trở lại nhánh phát triển và sau đó tách ra khỏi đó để sửa các bản sửa lỗi và sau đó hợp nhất lại phát triển và sau đó phát hành. Và bạn có lợi thế là không bị hack/sửa lỗi nóng ở bất kỳ đâu trong nhánh tính năng của bạn. Các tính năng khác dựa trên tính năng này có thể tiếp tục song song. Và bạn có thể từ bỏ các nhánh hotfix hoặc xóa khỏi lịch sử. Chỉ có một chế độ xem này và có lẽ bạn có thể bảo vệ chiến lược của mình trong trường hợp này. Tôi đang mở để thảo luận thêm và sửa chữa trong câu trả lời của tôi :)

Và đây là một hình ảnh khá khó chịu mô tả những gì tôi đang truyền đạt. Git Branching Diagram

+3

Hình ảnh tuyệt vời !!!!! – slebetman

Các vấn đề liên quan