Tôi sẽ thử và đưa ra chiến lược kiểm soát phiên bản cho công ty của mình; chúng tôi hiện đang sử dụng SVN nhưng không có cấu trúc nào cho nó - về cơ bản chúng tôi chỉ có một thân cây và chỉ cam kết với điều đó. Gần đây, người quản lý phát triển đã bắt đầu một kho lưu trữ thứ hai hoạt động như "thẻ" của chúng tôi, nhưng nó phải được hợp nhất thủ công với "thân cây" vì nó không phải là một phần của cùng một kho lưu trữ mà là một kho hoàn toàn riêng biệt. Trên thực tế, chỉ có một thư mục, được gọi là "Dev" (thực sự có các thư mục "Dev" khác nhau vào các ngày khác nhau nhưng chỉ "Dev" là thư mục chính) và dưới đó là mọi thứ khác; Tất cả các dự án khác. Nó hoàn toàn không được tổ chức bởi dự án, nó không có khái niệm về nhánh / thẻ / thân cây hay bất cứ thứ gì. Người thiết lập ban đầu (đã qua lâu rồi, tất nhiên) dường như không biết cách thiết lập SVN, và kể từ đó, không ai bận tâm học cách làm mọi thứ đúng cách vì sợ phá vỡ thứ gì đó. Chúng tôi không sử dụng bất kỳ loại CI nào (hoặc thử nghiệm tự động, không may).
Đầu tiên, chúng ta có nên tách nó theo dự án không? Chẳng hạn, chúng ta có: Hai trang web ASP.NET (không phải Ứng dụng web, Trang web), Dịch vụ web, thư mục triển khai cho tất cả các tập lệnh bảng và quy trình được lưu trữ, hai máy khách dòng lệnh cho các dự án bên ngoài được gọi bởi WebSites và một thư mục chia sẻ có các đối tượng kinh doanh phổ biến và tương tự. Mỗi người trong số họ nên là dự án của riêng họ với thiết lập nhánh / thẻ / thân cây hoặc nên như thế này:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
và có tất cả các nhánh và mọi thứ có một bản sao của toàn bộ thư mục Dev không? Cách tiếp cận đó có thể dễ nuốt hơn vì chúng ta thường có những tình huống cần thay đổi trong thư viện mã được chia sẻ và ít nhất một (thường là cả hai) các trang web.
Thứ hai, chúng tôi phát hành thường xuyên ("đẩy" theo cách nói của chúng tôi) đến máy chủ dev và máy chủ trực tiếp của chúng tôi. Từ những gì tôi đã đọc cách tốt nhất để xử lý điều này sẽ là tất cả sự phát triển đi vào thân cây /, các nhánh là "tạm thời" và được sử dụng để thêm một tính năng mới có thể ảnh hưởng đến trung kế và các thẻ được phát hành? Vì vậy, chúng tôi thúc đẩy mỗi tháng, hãy nói và tôi đang làm việc trên một mô-đun hoàn toàn mới. Tôi sẽ phân nhánh trung kế và sử dụng nhánh đó cho mã của mình, viết và kiểm tra nó và bất cứ điều gì. Khi mô-đun hoàn thành, tôi sẽ hợp nhất nó trở lại vào thân cây (và có thể xóa chi nhánh) và khi chúng tôi sẵn sàng triển khai, chúng tôi sẽ gắn thẻ nó ("May2011" giả sử). Nếu chúng tôi có một sửa lỗi sau khi nó đi vào hoạt động, nó sẽ được sửa trong thẻ tháng 5 năm 2011 và được hợp nhất vào thân cây (vì vậy thân cây cũng được sửa chữa), và sau đó tháng 5 năm 2011 sẽ được đẩy ra một lần nữa với bản sửa lỗi? Đây có phải là ý định gắn thẻ?