2010-01-14 28 views
17

Tôi rất mới đối với Subversion, nhưng tôi đã sử dụng các hệ thống kiểm soát sửa đổi khác như ClearCase trong nhiều năm.Subversion không thể hợp nhất sau khi di chuyển

Ông chủ của tôi đã yêu cầu tôi sửa dự án này để có thể xây dựng nó bằng Maven thay vì Ant. Một trong những điều quan trọng tôi phải làm là di chuyển src/com đến src/main/java/com và di chuyển test/com đến src/test/java/com, mà tôi đã sử dụng lệnh svn mv. Tôi ngu ngốc giả định rằng kể từ khi tôi sử dụng lệnh Subversion để di chuyển các thư mục, Subversion sau đó sẽ biết rằng mọi thứ đã được di chuyển. Và khi tôi sáp nhập nhánh của tôi vào trong thân cây, nó dường như hoạt động. Nhưng bây giờ ai đó khác vừa hoàn thành công việc trên một chi nhánh mà anh ta đã phân nhánh trước công việc của tôi. Vì vậy, chúng tôi sẽ hợp nhất nội dung của anh ấy vào thân cây và về cơ bản Subversion dường như nghĩ rằng "ok, anh ấy đã thực hiện thay đổi đối với src/com/foo/bar/baz.java, nhưng thư mục đó không tồn tại nữa, vì vậy nó không liên quan, vì vậy hãy loại bỏ nó" thay vì những gì tôi mong đợi , là “ok, anh ấy đã thực hiện thay đổi đối với src/com/foo/bar/baz.java, nhưng src/com đã bị di chuyển, vì vậy tôi cần hợp nhất vào src/main/java/com/foo/bar/baz.java.

Có cách nào để làm cho Subversion thực hiện việc quản lý bản sửa đổi hay không, tôi có đang hợp nhất thủ công thay đổi của anh chàng này trong hai ngày tiếp theo không?

+1

Tôi cũng có chút "tính năng" này. Và tôi đang cố gắng tránh cơn ác mộng kết hợp thủ công. – granadaCoder

Trả lời

12

Để trả lời câu hỏi của bạn trực tiếp:

Có cách nào để làm cho Subversion làm công tác quản lý sửa đổi, hoặc tôi sẽ phải tự sáp nhập thay đổi của anh chàng này trong hai ngày tới?

Bạn sẽ có thể làm cho việc này dễ dàng hơn một chút.

Một điều mà bạn có thể làm để giảm bớt phần nào nỗi đau (giả sử một cách bố trí như sau)

/branch/foo/src/com 
/branch/foo/test/com 
/trunk/src/main/java/com 
/trunk/src/test/java/com 

Trước khi bạn chuyển src/com để src/main/java/com và thử nghiệm/com để src/test/java/com bạn có thể làm:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo . 

gì bạn có thể làm bây giờ là:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo/src/com src/main/java/com 
svn merge -r N:M http://server/branch/foo/test/com src/test/java/com 

Hope this helps để giúp bạn tiết kiệm một số thời gian.

+0

Ah người đàn ông, tôi muốn tôi đã nhìn thấy điều này trước khi tôi tự sáp nhập tất cả mọi thứ. –

2

Điều này nghe giống như sự cố một lần. Tôi đề nghị bạn có thể sử dụng svn diff > /to/some/file.patch (hoặc bình thường khác) để lưu thay đổi của mình vào một tệp, sau đó áp dụng nó trên thân đã di chuyển của bạn với patch -p0 < /to/some/file.path.

0

Bất cứ ai đã thử phần mềm này? xMerge

Đây là plugin cho SmartSVN nhưng có vẻ như nó thực hiện thủ thuật. Nếu có ai đang sử dụng nó, tôi sẽ biết ơn nếu gửi cho tôi đánh giá về nó.

0

Tôi vừa gặp sự cố tương tự và tôi đã giải quyết vấn đề với git. Tôi không muốn hợp nhất các mô-đun máy chủ với svn merge -r N:M http://server/branch/foo/test/com src/test/java/com cho src/main, src/testresources.

Vì vậy, tôi đã sử dụng git svn clone file:///some/repo -T trunk -b branches -t tags.Như thế này, tôi có thể giữ git master đồng bộ hóa với svn trunk và hợp nhất nó với chi nhánh git git của mình. Khi tôi đã hoàn tất, tôi đã hợp nhất chi nhánh git thành git master và từ đó đến svn trunk.

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