2009-02-21 31 views
6

Tôi có một thư mục dưới sự kiểm soát lật đổ. Tôi tạo ra một chi nhánh của nó chỉ để kiểm tra các công cụ sáp nhập. Tôi lấy một tập tin, sửa đổi dòng X trong thân cây là "abc" và sửa đổi cùng một dòng X là "def" trong chi nhánh của nó.SVN hợp nhất câu hỏi

Sau đó, từ các dir làm việc chi nhánh tôi đã làm:

svn merge branchURL trunkURL . 

Nó được cập nhật các tập tin với nội dung là "abc" tại đó số dòng, tức là nó đã không cho tôi một cuộc xung đột ở số điện thoại cùng một dòng như svn update sẽ cho tôi nếu tôi đã thực hiện nó trong cùng một thư mục làm việc và ai đó đã cam kết "def" trong kho lưu trữ.

Vì vậy, svn merge chỉ thay thế nội dung trong khi hợp nhất và không mang lại bất kỳ xung đột nào?

Và nếu như vậy, lý do phân nhánh ra khỏi thân chính sẽ là vô ích khi người ta không thể hợp nhất theo cách để giữ cả thay đổi trong thân cây và nhánh.

+0

Vì vậy, bạn 1) phân nhánh 2) sửa đổi dòng X thành "abc" trên thân 3) chuyển sang nhánh 4) sửa đổi dòng X thành "def" trên nhánh 5) đã hợp nhất? Nội dung của dòng X trước khi bạn sửa đổi nó thành "abc" là gì? –

+0

tôi đoán rằng sẽ có một sự khác biệt phiên bản tại văn phòng của tôi b/w svn khách hàng của tôi và máy chủ svn, như tôi nhớ rằng tôi vừa nâng cấp phiên bản svn của tôi lên 1.5 và điều đó đã không xảy ra tại máy chủ nơi repos tồn tại .. vì vậy thực tế là tôi đã không nhận được xung đột, có thể là kết quả của phiên bản khác biệt. – ashishsony

Trả lời

6

Bạn nhận ra những gì

svn merge branchUrl trunkUrl branchWorkingCopy 

Trên thực tế không có gì, đúng không?

Dưới đây là một bản dịch:

Hình ra tập các thay đổi cần thiết để thực hiện các nội dung của branchUrl giống hệt với trunkUrl. Bây giờ, hãy thực hiện các thay đổi đó trên chi nhánh branchWorkingCopy.

Bạn sẽ không nhận được bất kỳ xung đột nào sáp nhập theo cách này. Tuy nhiên, khi bạn kiểm tra chi nhánh branchWorkingCopy, bạn sẽ làm cho chi nhánh của bạn giống hệt với thân cây, gần như chắc chắn không phải là thứ bạn muốn.

Nếu bạn chỉ muốn sao chép thay đổi đã chọn từ thân-chi nhánh, bạn sẽ cần phải nói với Subversion thay đổi mà bạn muốn sao chép và sử dụng một hình thức khác nhau của lệnh hợp nhất:

svn merge -r100:103 trunkUrl branchWorkingCopy 

Có nghĩa là: Xác định tập hợp các thay đổi cần thiết để có được từ r100 đến r103 trên thân cây. Thực hiện những thay đổi trên bản sao làm việc (của chi nhánh). Lưu ý rằng "tập hợp thay đổi" này sẽ không bao gồm các thay đổi được thực hiện bởi r100, vì những thay đổi đó được thu thập bởi tập hợp các thay đổi cần thiết để nhận được từ r99 đến r100. Phạm vi sửa đổi trong Subversion là nửa mở.

Ngoài ra, hãy xem xét việc đọc fine manual, nếu bạn chưa có.

+0

Anh ấy vẫn có thể nhận được xung đột (tôi đã làm), nhưng câu trả lời của bạn là đúng. –

+0

Điều đó làm tôi ngạc nhiên, nhưng sau đó tôi giả sử không có những thay đổi không được cam kết trong branchWorkingCopy. Bạn đã nhìn thấy xung đột ngay cả với một điểm đến sạch sẽ? – bendin

+0

thực sự câu trả lời này đã làm rõ tất cả những nghi ngờ của tôi, như tôi đã sử dụng lệnh với thứ tự không chính xác của các đối số ... – ashishsony

0

Vậy việc hợp nhất svn chỉ thay thế nội dung trong khi hợp nhất và không mang lại bất kỳ xung đột nào?

Vâng, không. Tôi có thể không thực sự chỉ ra những gì bạn đã làm sai, nhưng sáp nhập cờ xung đột giống như cập nhật.

0

Tôi có thể thiếu một cái gì đó, nhưng khi tôi đã sử dụng svn hợp nhất, tôi đã luôn luôn phải có được số sửa đổi ngay nếu tôi muốn nó hoạt động chính xác.

Vì vậy, nếu bạn phân nhánh (hoặc cuối cùng sáp nhập) tại phiên bản 100, thân hiện đang ở 200, và bạn muốn kết hợp thay đổi từ thân cây vào chi nhánh của bạn, sau đó trong thư mục làm việc chi nhánh bạn làm:

svn merge -r 100:200 trunkURL 

Sau đó, tôi nghĩ bạn sẽ thấy một xung đột, mà bạn giải quyết và kiểm tra. Bạn làm một điều tương tự trong thư mục làm việc thân cây để hợp nhất từ ​​chi nhánh của bạn trở lại vào thân cây.

svn hợp nhất mà không -r khác với hai vị trí bạn chỉ định và áp dụng khác biệt đó cho thư mục làm việc. Vì vậy, tôi suy đoán rằng những gì đã xảy ra là không có xung đột, bởi vì thư mục làm việc của bạn phù hợp với người đứng đầu chi nhánh. Vì vậy, sự khác biệt giữa người đứng đầu của chi nhánh và người đứng đầu của thân cây có thể được áp dụng cho thư mục làm việc của bạn mà không có bất kỳ vấn đề. Đây không phải là những gì bạn muốn làm: tất cả những gì nó làm là thay đổi thư mục làm việc của bạn để phù hợp với thân cây. Hãy thử thực hiện một thay đổi khác trên chi nhánh, đăng ký và lặp lại quy trình. Nếu hợp nhất undoes rằng thay đổi (vì nó không phải là trên thân cây), sau đó tôi phải về hình thức này svn hợp nhất, nhưng như tôi nói tôi đã không sử dụng nó.

[Edit: trước khi phiên bản svn 1,5 ...]

danh bạ và các chi nhánh làm việc không phải là điều tương tự trong SVN, và gây phiền nhiễu như nó có, bạn phải giải thích cho sự khác biệt. SVN cần thêm thông tin để thực hiện việc hợp nhất chi nhánh bạn muốn, hơn là thực hiện cập nhật hoặc đăng ký, bởi vì nó không tự động tính đến chi nhánh xảy ra theo cách mà nó luôn kiểm tra thư mục làm việc đã được kiểm tra ở đâu. Tôi chắc chắn có một lý do cho điều đó, tôi chỉ không biết chắc chắn nó là gì: có thể bởi vì bản sao svn là cho nhiều thứ hơn là chỉ các chi nhánh.

[Chỉnh sửa ... nhưng theo nhận xét của Joshua McKinnon về câu trả lời này, 1,5 svn hỗ trợ hợp nhất nhánh hợp lệ, thực hiện những gì bạn muốn tự động.Chỉ định URL bạn đang hợp nhất và chạy lệnh trong thư mục làm việc của bất kỳ thứ gì bạn đang hợp nhất. Vì vậy, trong trường hợp này, hãy thử

svn merge trunkURL 

và bạn sẽ thấy xung đột. Bạn có thể phải phục hồi các thư mục làm việc đầu tiên.]

+0

Cho đến khi subversion 1.5, tôi tin rằng điều này là luôn luôn cần thiết. Bây giờ, một 'svn merge sourceURL' thẳng từ target workspce sẽ hợp nhất tất cả các sửa đổi mà không được đăng nhập như được sáp nhập trong siêu dữ liệu của subversion. –

+0

Rất tốt, cảm ơn. Bây giờ bạn đề cập đến nó, tôi nhớ đã nghe rằng 1.5 đã cải thiện mọi thứ về vấn đề này. Nhưng công ty tôi đã ở cùng thời điểm 1,5 đã xuất hiện đã có một loạt các kịch bản để tìm ra các số phiên bản chính xác, và không có xung quanh để thay đổi mọi thứ khi tôi rời đi. –

+0

Tôi nghĩ rằng bạn có một điểm hợp lệ về lý do tại sao tôi không nhận được cuộc xung đột .. nhưng tôi sẽ phải thử lại vào thứ hai trước khi tôi có thể đăng thêm các quan sát của mình .. cảm ơn bạn đã trả lời. – ashishsony