2009-02-24 10 views
5

Tôi có hai kho lưu trữ trực tiếp trên các máy chủ riêng biệt, gọi chúng là repo-1 và repo-2.SVN Hợp nhất Chi nhánh từ một Repo vào Trunk của Repo khác

Để bắt đầu cả "thân" là bình đẳng:

repo-1/trunk == repo-2/trunk

thay đổi khi đó đã được cam kết để repo-1/trunk và tôi đã làm việc trên và cam kết thay đổi đối với repo-2/trunk.

Bây giờ tôi cần hợp nhất các thay đổi từ repo-1/trunk thành repo-2/trunk.

Tôi nghĩ rằng tôi sẽ sao chép repo-1/trunk thành repo-2/tags/r1_20090224, sau đó hợp nhất thẻ đó vào bản sao làm việc tại địa phương của repo-2/trunk (ví dụ: c: \ dev \ repo2-trunk).

Bất kỳ đề xuất nào về cách thực hiện việc này? Tôi đang cố gắng sử dụng TortoiseSVN và biểu diễn "Hợp nhất hai cây khác nhau", tôi đã sử dụng các cài đặt sau:

Từ: repo-2/trunk Để: repo-2/Thẻ/r1_20090224 Làm việc Copy: c: \ dev \ repo2-trunk

Tôi cũng đã thử đổi "từ" và "thành" ... nhưng không may mắn. Bằng cách cố gắng một trong hai tùy chọn merge tôi hoặc là kết thúc với kết quả như sau:

  1. Nếu tôi kết hợp từ thân cây để gắn thẻ (vào bản sao cục bộ của tôi về repo-2/trunk) tôi đã làm mất những thay đổi thân tôi và nhận được thẻ thay đổi.

  2. Nếu tôi nhập từ thẻ vào thân cây (vào bản sao nội bộ của tôi của repo-2/trunk) Tôi bị mất thẻ thay đổi và giữ thay đổi thân cây.

Mọi đề xuất để thực hiện việc này ??

+1

@codecraig, có bạn tìm ra giải pháp cho vấn đề này? – vladr

Trả lời

1

Đầu tiên tìm ra bản sửa đổi nơi các cây giống nhau. Sau đó hợp nhất từ ​​bản sửa đổi đó cho HEAD của kho lưu trữ repo-1 vào bản sao làm việc repo-2 của bạn.

Sử dụng client commandline nó tương tự như này, nếu bạn muốn kết hợp thay đổi giữa r123 và r456

svn merge http://domain.tld/[email protected] http://domain.tld/[email protected] repos2-workingcopy 
0

SVK có thể có thể giúp đỡ nếu bạn thấy mình liên tục quản lý nhiều kho theo thời gian mà cần phải được đồng bộ hóa mọi lúc một lần.

1

Nó không hoàn toàn rõ ràng, nhưng bạn cần phải hợp nhất từ ​​cơ sở của hai cây, tức là điểm mà tại đó hai thân cây giống nhau.

Sander đánh bại tôi vào nó, vì vậy tín dụng với anh ta, nhưng đây là một vài mẹo khác:

  1. Nhận hai kho này gia nhập thành một càng sớm càng tốt; Subversion không thực sự được thiết kế để làm việc như thế này. Hoặc cách khác chuyển sang DVCS như git hoặc bazaar hoặc ...
  2. Nếu bạn gắn bó với Subversion, thông thường loại công cụ này được thực hiện với các chi nhánh , không phải thẻ. Thẻ thường được sử dụng làm điểm đánh dấu và không được cam kết.
1

Nếusvn merge bị lỗi bạn qua hai trang web/server:

svn: Unusable URI: it does not refer to this repository 

Sau đó sử dụng các phương pháp sau đây:

  1. xác định mức điều chỉnh mà repo-2 bắt đầu bất đồng từ repo-1, giả sử 123, sau đó:
  2. svn co http://server1/repo-1/trunk
  3. svn diff -r123:HEAD http://server2/repo-2/trunk >repo2.patches
  4. patch -p0 -i repo2.patches
  5. màn hình cho bất kỳ xung đột và giải quyết chúng
  6. svn ci --message "merged from repo-2"
+0

Vì vậy, hai repo không chia sẻ bất kỳ lịch sử nào. Ví dụ, repo-1/trunk tồn tại trong một thời gian. sau đó repo-2/trunk được tạo bằng cách thực hiện như sau: 1. xuất repo-1/trunk và ghi vào đĩa CD 2. CD được đưa tới máy chủ repo-2 và chỉ được thêm vào là repo-2/thân cây – codecraig

+0

Giúp tôi. Cảm ơn – uriDium