2010-01-27 33 views
5

tại thời điểm chúng tôi sử dụng Subversion để kiểm soát nguồn, nhưng tất cả công việc hợp nhất cho bản phát hành của chúng tôi được thực hiện thủ công. Chúng tôi phát hành vài lần một năm, do đó, tạo một chi nhánh cho mỗi bản phát hành. Tất cả các công việc từ các chi nhánh trước đó phải làm cho nó thành những cái sau này. Làm việc trên các chi nhánh sau đó không được đưa vào các nhánh trước đó (đây là trong hợp đồng của chúng tôi). Tôi tin rằng điều này được gọi là Mô hình quảng cáo. Tôi nghĩ biểu đồ sau đây minh họa tốt nhất quy trình làm việc mong muốn của chúng tôi, với các nhánh được tạo ra bất cứ khi nào công việc bắt đầu trên bản phát hành mới và thay đổi từ các nhánh trước đó sang các phiên bản mới hơn.Sử dụng Subversion với Mô hình quảng cáo

 
| 
1 
| 
|\ 
| \ 
| 2 
3 | 
|\| 
4 | 
| |\ 
5 | \ 
| 6 | 
| | 7 
|\|\| 
| |\| 
8 9 |\ 
| | | \ 
|\| | 10 
x |\| | 
    | |\| 
    | | | 

a b c d 
  • có công việc mô hình này suôn sẻ sử dụng Subversion bất chấp việc thiếu một thân cây có ý nghĩa?
  • Công cụ theo dõi hợp nhất tự động có hoạt động đối với các bản cập nhật từ các nhánh trước đó sang các phiên bản mới hơn không?
  • Bạn có thể đóng/xóa/bỏ qua nhánh (trong nhánh phát hành ví dụ 'a') này mà không cần tích hợp lại không?
  • Bạn có thể tạo các chi nhánh của mỗi chi nhánh phát hành và hợp nhất công việc theo dõi cho các chi nhánh này không? (Họ sẽ thực hiện theo mô hình tạo/hợp nhất/tái hòa nhập được đề xuất.)

Chỉnh sửa - thêm thông tin khác.

Lý do mô hình Trunk không ổn định truyền thống có thể không phù hợp được minh họa bằng biểu đồ sau. Tính năng cho mỗi bản phát hành không nhất thiết phải hoàn thành theo thứ tự phát hành (một số khách hàng có thể chậm để xác nhận yêu cầu). Chúng tôi muốn tuyên truyền những thay đổi từ các nhánh trước đó sang các nhánh sau càng sớm càng tốt.

 
    a 
    | 
    1 
    | 
    b|\ a 
    | \ 
    | 2 
    3 | 
    | | 
    4 | 
    b/|c | 
/5 | 
| | 6 
7 | | 
b c a 

Trong trường hợp này, chúng tôi muốn có tính năng 2 (hoàn thành vào chi nhánh a) trong chi nhánh b, nhưng vì đây là một đứa trẻ để cha mẹ hợp nhất, và do đó không được hỗ trợ bởi Subversion, nó sẽ phải được thực hiện bằng tay. Tương tự, đối tượng địa lý 6 sẽ phải được hợp nhất thủ công hai lần. Tôi dự đoán đây là một quá trình tương đối chậm và dễ bị lỗi so với các lần hợp nhất được theo dõi tự động.

Trả lời

1

Nếu tôi hiểu tình hình của bạn, không có gì trong yêu cầu của bạn làm cho mọi thứ trở nên phức tạp như bạn dường như đang tạo ra chúng. Bạn cũng đang nhấn mạnh quá nhiều vào giá trị của việc hợp nhất tự động so với thủ công (nhiều hơn về sau). Chi nhánh CVS sẽ là một vấn đề khác, nhưng không phải với cách SVN xử lý "các nhánh" (nghĩa là nó không).

Bạn có thể có một dây chuyền phát triển chính (không ổn định hoặc ổn định) và tạo chi nhánh cho từng khách hàng hoặc phát hành (hoặc cả hai). Khi các đối tượng địa lý được xác thực, chúng sẽ được hợp nhất trở lại dòng chính để các chi nhánh sau có thể bao gồm những thay đổi đó hoặc bạn luôn hợp nhất một chiều từ nhánh gốc. Không có gì đòi hỏi bạn phải đóng nhánh và hợp nhất không kém tự động hơn là nó sẽ hỗ trợ sơ đồ (hỗn loạn) đầu tiên của bạn cho bạn có nhiều đường phát triển đồng thời.

Yêu cầu mà bạn chỉ hợp nhất các âm thanh chuyển tiếp như bạn chỉ cần hợp nhất các bản sửa đổi tập hợp con từ dòng chính, sửa đổi sau khi sửa đổi chi nhánh đã cho. Việc sáp nhập theo cách này sẽ cho phép bạn hợp nhất các thay đổi từ các nhánh tùy ý trở lại dòng chính bao nhiêu lần tùy thích (vì chúng được xác nhận với khách hàng của bạn) và có thể được áp dụng về phía trước với sự tự tin rằng chỉ những thay đổi được xác thực mới được áp dụng. Bạn có thể thiết lập tính năng hợp nhất tự động để theo dõi bản sửa đổi bản sao đó (xem các bản sao chép -stop-on-copy và dựa trên dải ô). Phát hành các chi nhánh, sau đó chọn các bộ thay đổi đã được xác nhận đã xảy ra từ một điểm cụ thể về phía trước.

SVN không "theo dõi hợp nhất" hơn bất kỳ chi tiết nào hỗ trợ các chi nhánh (mà không, chúng chỉ là bản sao nhẹ). Bạn nói với nó (hoặc svnmerge nói với nó) phạm vi để hợp nhất và nó áp dụng những thay đổi đó. Bạn có thể nhận được hiệu ứng mà bạn yêu cầu hợp đồng để hỗ trợ, bất kể.

Để trả lời câu hỏi đặt ra của bạn:

  • Tôi không nghĩ rằng các mô hình mà bạn đề xuất là rất hiệu quả. Ngược lại, nó đã tăng tiềm năng cho sự hỗn loạn theo dõi tính năng vì bạn có thể phải quét các nhánh để thay đổi và hợp nhất nhiều lần. Hơn nữa, nó chắc chắn sẽ gây nhầm lẫn cho các nhà phát triển quen thuộc với SVN và các cấu trúc tổ chức SVN truyền thống hơn.

  • Chắc chắn. Điều đó phải khá độc lập với cấu trúc bạn đã chọn. Bạn sẽ cần/muốn theo dõi các điểm sửa đổi của bạn bất kể (có lẽ thông qua một số kịch bản đơn giản lúc tồi tệ hơn).

  • Chắc chắn. Chi nhánh có hiệu quả không có chi phí trong SVN ở phía máy chủ. Phía khách hàng có chi phí nếu bạn làm toàn bộ việc kiểm tra gốc nhưng đó thường là một điều ngu ngốc để làm bất kể. Tương tự, không có vấn đề gì khi bỏ qua/xóa một nhánh. Nó chỉ là một thay đổi khác đối với hệ thống phân cấp toàn cầu như bất kỳ bản sao/xóa/đổi tên/etc nào khác.

  • Điều đó sẽ hoạt động bất kể cấu trúc tổ chức "phân nhánh" được đưa ra. Có vẻ như có một chút hiểu lầm về ý nghĩa của việc trở thành "nhánh" trong SVN. Bạn sẽ có thể thiết lập những gì bạn muốn và thực hiện kết hợp 'thủ công' một cách dễ dàng bất kể và sau đó thiết lập kết hợp tự động sau một vài cập nhật của khách hàng để bạn có thể hiểu các bước hợp nhất của mình tốt hơn một chút.

Chúc mừng!

+0

Câu trả lời hay. Sự cân bằng tôi có thể thấy là trong mô hình của bạn có thể cần phải lặp lại các lần hợp nhất, ví dụ một bugfix cam kết với trunk phải được hợp nhất với tất cả các nhánh phát hành mở. Nếu một trong số họ bị bỏ lỡ, các bugfix sẽ bị bỏ lỡ từ một bản phát hành. Với mô hình quảng cáo, có vẻ như không có cơ hội để thiếu các bản sửa lỗi này, do đó sẽ yêu cầu ít công việc thủ công hơn. Tuy nhiên có vẻ như mô hình của tôi đi lạc xa từ vùng thoải mái của SVN mà nó đang thiết lập chuông báo động, do đó tôi không cảm thấy an toàn khi mạo hiểm mã nguồn của chúng tôi với nó. Tôi sẽ đưa nó cho đội. Cảm ơn! –

1

Bạn nói:

Tất cả các công việc từ các chi nhánh trước đó phải làm cho nó thành cái sau này. Làm việc về sau chi nhánh không phải làm cho nó vào trước người (đây là trong hợp đồng của chúng tôi)

Ở đây, nếu chúng ta thay thế các chi nhánh với các phiên bản (tôi nghi ngờ khách hàng của bạn biết hoặc quan tâm đến "chi nhánh"), chúng tôi nhận :

Tất cả công việc từ bản phát hành trước đó phải biến nó thành phiên bản mới hơn. Làm việc về sau phát hành không phải làm cho nó vào trước người (đây là trong hợp đồng của chúng tôi)

tôi không thấy bất cứ điều gì trong yêu cầu đó để đề nghị chương trình phân nhánh rất phức tạp bạn đang đề xuất - bạn có thể làm điều này với kiểu phát triển "thân cây không ổn định" cổ điển. Hoặc bạn có nhiều yêu cầu hơn mà bạn chưa nói với chúng tôi hoặc bạn quá kỹ thuật.

+0

Vấn đề với mô hình thân không ổn định (nơi thân chứa bản phát hành xa nhất) là bản cập nhật từ bản phát hành sớm hơn (đã được phân nhánh) không thể quay lại thân cây mà không tái hòa nhập (liên quan đến việc đóng nhánh) hoặc hợp nhất thủ công. Chúng tôi đang làm việc trên một số bản phát hành cùng một lúc, mỗi bản phát hành được tạo riêng và muốn cập nhật nhanh chóng xếp chồng. Nếu phân nhánh được thực hiện theo cách khác (vì vậy các nhánh mới được phân nhánh khỏi nhánh trước, thay vì phân nhánh nhánh cũ ra khỏi thân cây), các cập nhật sẽ đi theo hướng mà SVN có thể theo dõi hợp nhất. –

Các vấn đề liên quan