Trong một dự án web được phát triển liên tục (không phải là sản phẩm), chúng tôi hiện có chiến lược phân nhánh sau, chủ yếu dựa trên luồng git :
- phát triển chi nhánh: phiên bản làm việc mới nhất
- nhánh chính: phiên bản sẽ được phát hành / phát hành phiên bản
- nhánh tính năng: tính năng trong phát triển
- Chi nhánh hotfix: lỗi khẩn cấp trong phiên bản phát hành
Master chỉ được đọc, cập nhật thông qua các yêu cầu kéo từ các nhánh phát triển hoặc hotfix . Mỗi bản cập nhật dẫn đến một ứng cử viên phát hành được xây dựng và triển khai cho hệ thống dàn. Ứng viên phát hành được triển khai để sản xuất sau khi phê duyệt thủ công.
Các nhánh tính năng được tạo dựa trên sự phát triển hoặc từ cam kết cuối cùng đã được hợp nhất thành chủ. Yêu cầu kéo từ nhánh tính năng để phát triển được xây dựng, triển khai đến hệ thống kiểm tra miễn phí nơi kiểm tra tích hợp và kiểm tra chấp nhận (tự động & thủ công) được thực thi. Khi được kiểm tra và xem xét thành công, PR sẽ được hợp nhất, do đó nó sẽ trở thành một phần của phiên bản tiếp theo (tức là hợp nhất từ phát triển thành chủ).
Mục tiêu của tôi
Tôi muốn đơn giản hóa điều này và thoát khỏi nhánh phát triển. Chi nhánh phát triển có hầu hết các lý do lịch sử và vì nó luôn là phiên bản được thử nghiệm thành công, tôi nghĩ không cần thiết phải tách nó ra khỏi chủ. Loại bỏ nó cũng sẽ đơn giản hóa quá trình phát hành vì không còn hợp nhất nữa.
Tôi có các ràng buộc sau:
- phát hành được lên lịch và không nên hoàn toàn tự động
- trong khi các nhánh tính năng thường tồn tại trong thời gian ngắn, một số nhánh không được kết hợp trong vài tuần (ví dụ như thiết kế lại) nhưng cũng cần phải được thử nghiệm (hiện tại là các yêu cầu kéo mở để phát triển)
- đôi khi một tính năng duy nhất nên được phát hành bên ngoài bản phát hành thông thường, thực sự biến nó thành một hotfix. Với chiến lược hiện tại, tôi có thể khởi động lại một nhánh tính năng và hợp nhất nó trực tiếp vào chủ
- điều đó cũng xảy ra rằng chúng ta cần giữ lại các tính năng sau khi thử nghiệm chấp nhận với các hệ thống bên ngoài để dàn dựng không thành công
Nơi tôi không chắc chắn về quá trình chuyển đổi:
- hiện tại tôi đang xây dựng các yêu cầu kéo để thử nghiệm và hợp nhất các cam kết cho các bản phát hành. Tôi có thể thống nhất điều này?
- Làm thế nào để đối phó với các hotfix khi bản chính đi trước bản phát hành mới nhất. Tôi có nên xây dựng và triển khai các bản phát hành trực tiếp từ các chi nhánh hotfix không?
- Có cách nào hợp lý để xử lý các tính năng cần loại trừ khỏi bản phát hành sau khi chúng đã được hợp nhất không? Là một nhánh phát triển riêng biệt thực sự là một lợi thế cho những trường hợp này? Hầu hết thời gian tôi kết thúc hoàn nguyên và hoàn nguyên các cam kết bằng mọi cách.