Cập nhật 2019:
Ngày nay, câu hỏi sẽ được nhìn thấy trong bối cảnh sử dụng Git và 10 năm sử dụng quy trình phát triển phân tán đó (cộng tác chủ yếu thông qua GitHub ) cho thấy các thực tiễn tốt nhất chung:
master
là nhánh sẵn sàng để được triển khai vào sản xuất bất cứ lúc nào: phiên bản tiếp theo, với một tập hợp các nhánh tính năng được chọn được hợp nhất master
.
dev
(hoặc nhánh tích hợp hoặc ' next
') là nhánh mà nhánh tính năng được chọn cho phiên bản tiếp theo được thử nghiệm cùng nhau
maintenance
(hoặc hot-fix
) nhánh là một trong những bản sửa lỗi phát triển / sửa lỗi phát hành hiện tại, với khả năng hợp nhất trở lại dev
và hoặcmaster
Loại quy trình công việc đó (nơi bạn không hợp nhất dev
với master
, nhưng nơi bạn chỉ hợp nhất nhánh tính năng dev
, sau đó nếu được chọn, để master
có thể thả dễ dàng các tính năng không sẵn sàng cho bản phát hành tiếp theo) được triển khai trong Git repo chính nó, với gitworkflow (một từ, minh họa ở đây ).
Xem thêm tại rocketraman/gitworkflow
. Lịch sử của việc làm này so với Trunk-Dựa-Development được ghi nhận trong các bình luận và thảo luận về bài viết này của Adam Dymitruk .
(nguồn: Gitworkflow: Primer định hướng nhiệm vụ )
Lưu ý: trong quy trình công việc phân tán đó, bạn có thể cam kết bất cứ khi nào bạn muốn và chuyển sang chi nhánh cá nhân một số WIP (Work In Progress) mà không gặp sự cố: bạn sẽ có thể sắp xếp lại (git rebase) các cam kết của mình trước khi biến chúng thành một nhánh của tính năng.
Câu trả lời gốc (tháng 10 năm 2008, hơn 10 năm trước)
Tất cả phụ thuộc vào bản chất tuần tự của quản lý phát hành của bạn
Đầu tiên, là tất cả mọi thứ trong thân cây của bạn thực sự cho phiên bản tiếp theo ? Bạn có thể thấy rằng một số chức năng hiện đang được phát triển là:
- quá phức tạp và vẫn cần phải được tinh chế
- chưa sẵn sàng kịp
- thú vị nhưng không phải cho phiên bản tiếp theo này
Trong trường hợp này, thân cây nên chứa bất kỳ nỗ lực phát triển hiện tại nào, nhưng một nhánh phát hành được xác định sớm trước khi phát hành tiếp theo có thể đóng vai trò là nhánh hợp nhất trong đó chỉ có mã thích hợp (được xác thực cho phiên bản tiếp theo) được hợp nhất, sau đó được cố định trong giai đoạn tương đồng, và cuối cùng bị đóng băng khi đi vào sản xuất.
Khi nói đến mã sản xuất, bạn cũng cần quản lý các nhánh vá của mình , trong khi ghi nhớ rằng:
- bộ bản vá đầu tiên thực sự có thể bắt đầu trước khi phát hành đầu tiên vào sản xuất (có nghĩa là bạn biết bạn sẽ đi vào sản xuất với một số lỗi bạn không thể sửa kịp thời, nhưng bạn có thể bắt đầu công việc cho những lỗi đó trong một nhánh riêng)
- các nhánh vá khác sẽ có sự sang trọng để bắt đầu từ một nhãn sản xuất được xác định rõ
Khi nói đến nhánh dev, bạn có thể có một thân cây, trừ khi bạn có những nỗ lực phát triển khác mà bạn cần thực hiện song song như:
- tái cấu trúc lớn
- thử nghiệm thư viện kỹ thuật mới có thể thay đổi cách bạn gọi mọi thứ trong các lớp khác
- bắt đầu một chu kỳ phát hành mới, nơi những thay đổi kiến trúc quan trọng cần được kết hợp.
Bây giờ, nếu chu trình phát hành-phát triển của bạn rất tuần tự, bạn có thể đi như các câu trả lời khác gợi ý: một thân cây và một số nhánh phát hành. Điều đó làm việc cho các dự án nhỏ, nơi tất cả sự phát triển chắc chắn sẽ đi vào phiên bản tiếp theo, và có thể bị đóng băng và đóng vai trò là điểm khởi đầu cho chi nhánh phát hành, nơi các bản vá có thể diễn ra. Đó là quá trình danh nghĩa, nhưng ngay khi bạn có một dự án phức tạp hơn ... nó không còn đủ nữa.
Để trả lời bình luận của Ville M .:
- Hãy nhớ rằng nhánh dev không có nghĩa là 'một nhánh cho mỗi nhà phát triển' (sẽ kích hoạt 'sự điên rồ hợp nhất', trong đó mỗi nhà phát triển sẽ phải hợp nhất công việc của người khác để xem / nhận công việc của họ), nhưng một nhánh dev cho mỗi phát triển cố gắng.
- Khi những nỗ lực đó cần được sáp nhập trở lại vào thân cây (hoặc bất kỳ nhánh "chính" hoặc phát hành nào khác mà bạn xác định), đây là công việc của nhà phát triển, không - tôi nhắc lại, KHÔNG - Trình quản lý SC (người không biết cách giải quyết bất kỳ sự hợp nhất xung đột). Người lãnh đạo dự án có thể giám sát việc hợp nhất, nghĩa là đảm bảo nó bắt đầu / kết thúc đúng hạn.
- bất cứ ai bạn chọn để thực sự hợp nhất, điều quan trọng nhất là:
- để có các bài kiểm tra đơn vị và / hoặc môi trường lắp ráp trong đó bạn có thể triển khai / kiểm tra kết quả của việc hợp nhất.
- đã xác định một thẻ trước khi bắt đầu hợp nhất để có thể quay lại trạng thái trước đó nếu việc hợp nhất được nói chứng tỏ bản thân quá phức tạp hoặc khá lâu để giải quyết.