2011-01-06 33 views
5

Sau mỗi lần commit vào 'trunk', chúng ta sẽ tự động chạy một loạt các thử nghiệm đối với trunk. Khi những bài kiểm tra đó trôi qua, tôi muốn một sự kết hợp tự động vào một nhánh gọi là 'test-passed'. Khi các kiểm tra thất bại, không có sự hợp nhất nào xảy ra, nhưng một khi vấn đề được cố định trên 'trunk' ở lần kế tiếp hoặc sau đó, tất cả các thay đổi sẽ được hợp nhất.Làm cách nào để tự động kết hợp khi thử nghiệm tự động vượt qua?

Vấn đề là phải có một chi nhánh có cùng nội dung với thân cây, nhưng đó chỉ là một chút lành mạnh hơn 'thân cây' vì ít nhất là các thử nghiệm tự động đã trôi qua.

Tôi có một tập lệnh cố gắng thực hiện điều đó theo cách thủ công nhưng đó là bản hack sử dụng các thuộc tính tùy chỉnh không hoạt động chính xác - như tôi vừa phát hiện ra. Làm thế nào để làm tốt nhất Subversion làm điều này?

+0

Bạn định xử lý các xung đột hợp nhất như thế nào? – Steve

+1

Tôi không nghĩ rằng có bất kỳ xung đột hợp nhất nào: 'kiểm tra-qua' luôn có nội dung giống như 'trunk', trừ khi HEAD on 'trunk' không vượt qua các bài kiểm tra, trong trường hợp nó có cùng nội dung như 'trunk' lần cuối cùng các bài kiểm tra đã trôi qua. –

Trả lời

5

Chạy các lệnh này tại thư mục gốc của một bản sao làm việc của kiểm tra-thông qua bất cứ khi nào bạn đã xác định rằng một thân cây sửa đổi <somerev> mới đã vượt qua các bài kiểm tra:

svn update 
svn merge http://example.com/svn/myproject/trunk -r 0:<somerev> 
svn commit -m "merged trunk revisions up to <somerev> into tests-passed" 

Bất cứ khi nào bạn sử dụng lệnh hợp nhất, SVN sẽ ghi lại các hợp nhất trong thuộc tính svn:mergeinfo. Vì vậy, lệnh trên sẽ tự động xác định bản sửa đổi nào trong phạm vi 0:<somerev> đủ điều kiện để hợp nhất, loại trừ bất kỳ hợp nhất nào đã được thực hiện.

Như bạn đã nói trong nhận xét, xung đột không được mong đợi. Nhưng đôi khi tôi đã nhìn thấy xung đột bất ngờ xảy ra anyway khi sáp nhập một loạt các phiên bản SVN có chứa đổi tên. Để loại bỏ các xung đột này, bạn có thể sử dụng tùy chọn --accept theirs-full với lệnh hợp nhất để luôn chấp nhận trạng thái trunk.

+0

Ah, "tự động xác định sửa đổi ... đủ điều kiện" là mát mẻ, tôi không biết điều đó. Tôi nghĩ rằng tôi phải bằng cách nào đó phân tích điều này ra bản thân mình, mà âm thanh xấu xí. Bạn đề nghị tôi tìm số như thế nào? Tôi đã cố gắng 'svnversion trunk', hay nó cần phải được +1? –

+0

@Johannes: không cần +1. Ví dụ: nếu phiên bản thành công mới nhất dành cho bản sửa đổi 100, bạn có thể hợp nhất '-r 0: 100'. –

0

Tôi sẽ tưởng tượng sử dụng bộ thử nghiệm để thực hiện.

Theo kinh nghiệm của mình, tôi sẽ chạy tập lệnh ANT để kiểm tra mã của tôi và có điều kiện cuối cùng để thực thi nhánh nếu các thử nghiệm thành công.

+0

Chúng tôi thực sự chạy thử nghiệm với kiến, và chúng tôi có một điều kiện cuối cùng giống như bạn nói. Câu hỏi đặt ra là: làm thế nào để tôi làm cho svn làm việc hợp nhất đúng dựa trên điều kiện đó? –

+0

Các bạn có theo dõi Name_spacing bằng mọi mã mới không. (code_ versioning) có thể giúp đỡ trong tình huống này. – NaV

+0

Ahem? Tôi không biết bạn đang nói gì về ... –

1

Bạn có thể sử dụng Công cụ tích hợp liên tục cho điều đó. Một khá phổ biến: Hudson

http://hudson-ci.org/

Bạn có thể kịch bản mà loại hành vi đó.

+0

Một lần nữa, câu hỏi của tôi là về phần svn của nó, không phải là phần lập lịch hoặc kịch bản. Trừ khi Hudson có một số phép thuật svn mà tôi không biết?(Thiết lập của chúng tôi ở đây không sử dụng Hudson để chạy các bản xây dựng và các bài kiểm tra để đáp ứng với checkins trên 'thân') –

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