Chúng tôi là một cửa hàng ISV nhỏ và chúng tôi thường gửi một phiên bản mới của các sản phẩm của chúng tôi mỗi tháng. Chúng tôi sử dụng Subversion làm kho lưu trữ mã và Visual Studio 2010 làm IDE. Tôi biết rất nhiều người đang ủng hộ Mercurial và các hệ thống kiểm soát nguồn phân tán khác nhưng tại thời điểm này tôi không thấy làm thế nào chúng ta có thể hưởng lợi từ những điều này, nhưng tôi có thể sai.
Vấn đề chính của chúng tôi là làm thế nào để giữ cho các nhánh và thân chính đồng bộ.
Đây là cách chúng ta làm mọi thứ ngày hôm nay:
- Phát hành phiên bản mới (tự động tạo thẻ trong Subversion)
- Tiếp tục làm việc trên thân cây chính sẽ được phát hành vào tháng tới
Và chu kỳ lặp lại mỗi tháng và hoạt động hoàn hảo. Vấn đề phát sinh khi một bản phát hành dịch vụ khẩn cấp cần được phát hành. Chúng tôi không thể giải phóng nó từ thân cây chính (2) vì nó đang được phát triển mạnh và nó không đủ ổn định để được phát hành khẩn cấp.
Trong trường hợp như vậy, chúng tôi làm như sau:
- Tạo một nhánh từ thẻ chúng tôi đã tạo ở bước (1)
- Vá lỗi
- Kiểm tra và phát hành
- Đẩy thay đổi trở lại thân cây chính (nếu có)
Vấn đề lớn nhất của chúng tôi là hợp nhất hai (chi nhánh với chính). Trong hầu hết các trường hợp, chúng tôi không thể dựa vào việc hợp nhất tự động vì ví dụ:
- rất nhiều thay đổi đã được thực hiện cho thân cây chính
- hợp nhất các tệp phức tạp (như các tệp XML của Visual Studio, v.v.) không hoạt động tốt
- một nhà phát triển / nhóm khác đã thực hiện các thay đổi mà bạn không hiểu và bạn không thể hợp nhất nó
Vì vậy, những gì bạn nghĩ là thực hành tốt nhất để giữ cho hai phiên bản khác nhau (nhánh và chính) đồng bộ. Bạn làm nghề gì?