2012-08-01 16 views
6

Tôi đã phân nhánh thân cây của tôi (ở phiên bản trước) và triển khai/cam kết một tính năng mới và thực hiện một phần của tính năng khác cục bộ cho chi nhánh. Bây giờ tôi cần phải tích hợp lại tính năng đã hoàn thành vào thân cây.Từ khóa sửa đổi PREV, BASE hoặc COMMITTED không hợp lệ cho URL trong khi tái hòa nhập một chi nhánh

I svn cp branches/completedfeature branches/uncompletedfeature để có được tính năng được hoàn thành một phần trong nhánh của chính nó. Tôi sau đó svn revert -R . mọi thứ trong chi nhánh đầu tiên, do đó, nó được cập nhật.

Bây giờ khi tôi svn merge --reintegrate ../../branches/completedfeature từ thân cây, tôi nhận được (với tôi) lỗi này khó hiểu:

PREV, BASE, or COMMITTED revision keywords are invalid for URL while reintegrating a branch 

Cả hai thân cây và các chi nhánh tính năng hoàn thành được cập nhật không có thay đổi địa phương. Điều gì đang xảy ra?

Trả lời

1

Dường như tôi phân nhánh sai/sai. Tôi đã không tìm ra cách khắc phục điều này đúng cách, vì bất kỳ ai trong tình huống này ở đây là làm thế nào tôi có những thay đổi của tôi trong thân cây bảo tồn hầu hết lịch sử của nhánh ngắn ngủi này:

Tìm tất cả các tệp của bạn đã thay đổi diff -ur trunk branch. Hãy chắc chắn rằng bạn nhìn qua các diff vì bất kỳ thay đổi nào trong thân cây không nằm trong nhánh sẽ được hoàn nguyên, vì vậy hãy bỏ qua các tệp đó hoặc nếu có thay đổi trong tệp trong cả hai cây, hãy đảm bảo chỉnh sửa diff theo cách thủ công sau.

Sao chép bất kỳ tập tin mới với svn để bảo tồn lịch sử của họ svn cp branch/path/file trunk/path/file

Bây giờ bạn chỉ cần những thay đổi trong các tập tin mà không thay đổi. Bạn không thể làm một hai nguồn hợp nhất bởi vì (ít nhất là trong svn 1.7 trong Cygwin) nó sẽ xóa và sau đó thêm các tập tin, xóa sạch lịch sử. Tùy chọn tôi chọn là xây dựng/áp dụng một bản vá và thực hiện một thông điệp cam kết về những gì đã xảy ra.

muchbetter địa điểm để tìm hiểu về cách vá, nhưng bên dưới là những gì tôi đã làm. Hãy nhớ rằng bạn sẽ cần khắc phục sự cố hợp nhất của mình nếu bạn có các tệp đã bị thay đổi trong cả hai cây.

Tạo bản vá của bạn bằng diff -u trunk/path/file branch/path/file >> patch.patch Thực hiện việc này cho từng tệp hoặc chuyển vào cờ đệ quy lần nữa và có sự khác biệt về công việc khó khăn.

Thực hiện chạy khô để đảm bảo các công trình vá và được các tập tin ngay vá patch -p0 --dry-run < patch.patch Sau đó vá nó patch -p0 < patch.patch

Sau đó, chắc chắn dự án xây dựng và kiểm tra xem nó trong.

Rời câu hỏi này mở trong hy vọng ai đó biết câu trả lời thực sự.

6

Tôi gặp lỗi này.

Câu hỏi của bạn gần như là kết quả google duy nhất (here is a description of the keywords).

Tôi đã có một chi nhánh dài với các chi nhánh khác sáp nhập vào nó ... quá trình vá sẽ dài và khó khăn. Vì vậy, mặc dù rằng This section of the SVN redbood cho thấy rằng bạn nên hợp nhất hai bản sao làm việc, tôi lạc quan đã cố gắng tái hòa nhập từ URL và nó đã hoạt động!

cd myLocalTrunk 
svn merge --reintegrate https://svn.blah.blah/blah/blah/branches/myBranch 
svn ci -m "reintegrating myBranch into trunk" 
0

Nói chung không có nhu cầu sử dụng bản vá-file ở đây - bất kỳ "-c x" hoặc "-r x: y" phạm vi thực sự là một changeset, tức là một loại bản vá có thể được áp dụng. Hãy tạo một ví dụ hoàn chỉnh, vì vậy ban đầu

svn copy trunk/path/file branch/path/file 

và sau đó người ta có thể làm việc trên thân cây. Bây giờ bạn cần phải biết điều chỉnh tầm xa để áp dụng các thay đổi đối với mục tiêu - kể từ khi số phiên bản là toàn cầu, bạn có thể yêu cầu cả hai tập tin, ví dụ

svn info trunk/path/file 
# 35 

svn info branch/path/file 
# 27 

Đây là phạm vi sử dụng, bây giờ bạn có thể nói

svn merge -r 27:35 trunk/path/file branch/path/file 

Bạn có thể nghĩ nó như thể đang tạo tệp vá bên trong cho phạm vi 27:35 đang được áp dụng cho mục tiêu. Miễn là điều này chỉ là tập tin-to-file, bạn thậm chí không thể có được một cuộc xung đột cây (nghĩ về các tập tin đổi tên trong một thư mục hợp nhất).

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