Đây là một vấn đề khó khăn nhưng là một vấn đề mà nhiều người phải đối mặt. Tôi thích sử dụng thiết lập Gitflow làm điểm bắt đầu.
Phát triển -> Công cụ mới đang được thực hiện trên
Master -> Công cụ đã hoàn thành cần thử nghiệm Sản xuất -> Công cụ đã được xuất bản để sản xuất.
Tại các tính năng nhỏ (ngắn hơn) tôi tạo một nhánh từ phát triển thực hiện công việc ở đó sau đó sáp nhập nhánh trở lại phát triển.
Tại các tính năng chính (dài hạn) tôi tạo một nhánh từ sự phát triển, tạo các nhánh nhỏ hơn từ nhánh đó, sau đó hợp nhất trở lại nhánh đầu tiên. Khi tính năng chính hoàn thành rồi quay lại nhánh phát triển.
Theo các khoảng thời gian đều đặn (tùy thuộc vào dự án), tôi hợp nhất phát triển trở lại thành chủ và một chu kỳ thử nghiệm bắt đầu. Nếu bất kỳ sửa lỗi nào xuất hiện trong thử nghiệm, chúng được thực hiện trong nhánh chính (nhánh phụ sau đó hợp nhất vào). Và phát triển có thể tiếp tục trên nhánh chính trong quá trình thử nghiệm.
Bất cứ lúc nào chủ nên được sáp nhập vào phát triển, và phát triển nên được hợp nhất với bất kỳ nhánh phụ dài hạn nào của nó.
chủ nên luôn luôn (về lý thuyết) sẵn sàng cho sản xuất. Phát triển phải luôn luôn (về lý thuyết) phải sẵn sàng cho sản xuất. Lý do duy nhất có một sự khác biệt là nó cung cấp một bộ tính năng vững chắc cho người kiểm tra thử nghiệm.
Khi đã sẵn sàng, một cam kết chính được kiểm tra sẽ được hợp nhất vào sản xuất và triển khai trong sản xuất xảy ra từ chi nhánh đó. Các HOTFIX cần được thực hiện trong trường hợp khẩn cấp sau đó có thể diễn ra trên nhánh Sản xuất mà không phải hợp nhất trong tổng thể (có thể có nhiều thay đổi chưa được kiểm tra).
Cây bình thường của tôi trông giống như
LongTerm -> Development -> Master -> Production
LongTerm <- Development | |
| Development -> Master |
LongTerm <- Development -> Master |
Development <- Master |
Master -> Production
Đó là quy tắc chung của tôi rằng không có thay đổi nào sẽ mất nhiều hơn sau vài giờ. Nếu có thì nó cần phải được thực hiện thành những thay đổi nhỏ hơn. Nếu đó là một tính năng rất lớn (như giao diện người dùng viết lại) thì điều đó sẽ diễn ra lâu dài để sự phát triển bình thường có thể tiếp tục cùng một lúc. Các nhánh LongTerm thường chỉ là các nhánh cục bộ trong khi Development, Master và Production là các nhánh từ xa. Bất kỳ chi nhánh cũng chỉ địa phương. Điều này giữ cho kho lưu trữ sạch sẽ cho người khác, mà không mất đi tính hữu dụng của git trên bộ tính năng dài hạn.
Tuy nhiên, tôi muốn lưu ý rằng sự tồn tại của một nhánh dài hạn là một điều hiếm. Thông thường, tất cả công việc của tôi đang trong quá trình phát triển. Chỉ khi tôi có một tính năng (bộ) sẽ mất nhiều thời gian thì tôi mới có thể làm việc trên các công cụ dev bình thường, tôi mới sử dụng nhánh LongTerm. Nếu đó chỉ là một tập hợp các thay đổi nên cùng nhau thì tôi chỉ không hợp nhất để làm chủ cho đến khi hoàn thành mọi việc.