Hợp nhất một chi nhánh vào Trunk


125

Tôi đang đối mặt với một vấn đề đặc biệt với SVN merge. Tôi muốn hợp nhất từ ​​một nhánh dev đến thân cây. Chúng tôi có nhiều nhánh dev cắt thân cây cùng một lúc.

Tôi đang hợp nhất một trong những nhánh đó với thân cây với lệnh này:

svn merge trunk branch_1

Tôi thấy những thay đổi không phải là một phần của nhánh này, được hợp nhất vào thân cây. Tôi đang làm gì sai?

Phiên bản SVN:

Subversion máy khách dòng lệnh, phiên bản 1.6.16-SlikSvn-tag-1.6.16@1076804-WIN32.


7
Tôi biết đây không phải là một câu trả lời, nhưng nếu bạn có một vài nhánh hoạt động đồng thời, thì có lẽ bạn nên chuyển sang dùng đồng bóng hoặc git. Ps: Tôi không phải là người cuồng tín, tôi đã làm việc với svn được 7 năm ;-)
zerkms

2
Nó cung cấp lợi thế gì? Tại sao chuyển sang git hoặc mercurial là một lựa chọn tốt hơn?
Vanchinathan Chandrasekaran

3
bởi vì git và mercurial có sự hỗ trợ tốt hơn của các chi nhánh. Ưu điểm: bạn sẽ không hỏi những câu hỏi như vậy và sẽ bớt đau đầu hơn trong việc tạo và duy trì các chi nhánh (hiện tôi đang làm việc trong một dự án với> 1000 chi nhánh, trong svn, đó là một địa ngục để làm việc với họ)
zerkms

Tôi khuyên bạn nên xem xét Svnmerge.py và xem xét bài viết này .
chown

Câu trả lời:


215

svn mergeCú pháp của bạn sai.

Bạn muốn kiểm tra một bản sao làm việc trunkvà sau đó sử dụng svn merge --reintegratetùy chọn:

$ pwd
/home/user/project-trunk

$ svn update  # (make sure the working copy is up to date)
At revision <N>.

$ svn merge --reintegrate ^/project/branches/branch_1
--- Merging differences between repository URLs into '.':
U    foo.c
U    bar.c
 U   .

$ # build, test, verify, ...

$ svn commit -m "Merge branch_1 back into trunk!"
Sending        .
Sending        foo.c
Sending        bar.c
Transmitting file data ..
Committed revision <N+1>.

Xem chương sách SVN về sáp nhập để biết thêm chi tiết.


Lưu ý rằng tại thời điểm nó được viết, đây là câu trả lời đúng (và được chấp nhận), nhưng mọi thứ đã tiếp tục. Xem câu trả lời của topek và http://subversion.apache.org/docs/release-notes/1.8.html#auto-reintegrate


4
Tùy chọn --reintegrate không bắt buộc, chi nhánh (trong 1.6) có thể được hợp nhất với bất kỳ đích nào trong bất kỳ số lần nào
Lazy Badger

1
Có thật không? Mà không có nguy cơ làm lại những thay đổi tương tự? Bạn có thể cung cấp một liên kết để chứng thực bằng chứng này xin vui lòng.
Neutrino

--reintegratethực sự không bắt buộc nhưng thực sự được khuyến nghị trong trường hợp này. Tôi đã cố gắng làm điều đó mà không có --reintegratevà kết thúc với hàng trăm xung đột. Với --reintegrate, không có xung đột và mọi thứ đều tốt!
tibo

17
Các --reintegratetùy chọn là đơn giản và hiệu quả, nhưng nó phải được lưu ý rằng "Một khi --reintegratehợp nhất được thực hiện từ cành này sang thân cây, chi nhánh không còn có thể sử dụng cho công việc tiếp theo. Đó là không có khả năng hấp thụ một cách chính xác những thay đổi thân cây mới, và cũng không nó có thể được reintegrated đúng để thân cây một lần nữa. " như được giải thích bởi cuốn sách bạn đã liên kết.
Pino

3
@daveL, chuyển tiếp hợp nhất từ ​​thân cây đến chi nhánh có ý nghĩa với tôi. Tuy nhiên, tôi đã tìm thấy một tính năng nâng cao để "giữ cho nhánh được tái tổ chức" (xem stackoverflow.com/a/10163059/685806 ), hơn nữa, nó được áp dụng tự động bởi các phiên bản máy khách mới hơn.
Pino

78

Nếu thư mục làm việc của bạn trỏ vào trung kế, thì bạn sẽ có thể hợp nhất chi nhánh của mình với:

svn merge https://HOST/repository/branches/branch_1

hãy chắc chắn để ban hành lệnh này trong thư mục gốc của thân cây của bạn


7
Kể từ SVN 1.8. đây là câu trả lời đúng. Xem subversion.apache.org/docs/release-notes/ từ
GreenAsJade

@blahdiblah đoạn mã có rất nhiều thông tin không liên quan. Có một lý do tại sao bản tóm tắt của các nghiên cứu nhận được các đơn đặt hàng có cường độ lớn hơn bất kỳ phần nào khác của nghiên cứu. Điều tương tự cũng xảy ra đối với thử nghiệm UX, giảm thiểu tỷ lệ thoát, v.v ... Tất cả đều theo cùng một nguyên tắc.
ahnbizcad

với 1.7 bạn có thể hợp nhất mà không cần tùy chọn --reintegrate và tiếp tục phát triển trên nhánh và tiếp tục hợp nhất. Đáng buồn thay, 1.8 sẽ buộc đây là một sự tái hòa nhập, và dường như không có cách nào để ngăn chặn nó. Điều này có nghĩa là ngay khi bạn hợp nhất, sau đó bạn không thể sử dụng chi nhánh mà không trải qua "điệu nhảy duy trì" đáng sợ
John Little

3
Đừng quên sau đó cam kết bản sao làm việc của thân cây trở lại kho lưu trữ sau khi hợp nhất!
Giăng

16

Thực hiện cập nhật svn trong trung kế, lưu ý số sửa đổi.

Từ thân cây:

svn merge -r<revision where branch was cut>:<revision of trunk> svn://path/to/branch/branchName

Bạn có thể kiểm tra nơi nhánh được cắt từ thân cây bằng cách thực hiện nhật ký svn

svn log --stop-on-copy

Vì có nhiều nhánh dev đang tồn tại cùng một lúc, điều này cũng không hiệu quả với tôi, nên lệnh này cũng kéo theo những thay đổi từ các nhánh khác. Có thể đây là một vấn đề với khách hàng SLik SVN?
Vanchinathan Chandrasekaran

Mặc dù điều này không chính xác, có nhiều cách dễ dàng hơn để hợp nhất với các phiên bản gần đây hơn svn(chẳng hạn như một OP đang sử dụng).
blahdibmus

@VanchinathanChandrasekaran, trong lệnh bạn chỉ định tên nhánh vì svn://path/to/branch/branchNamesẽ chỉ lấy các thay đổi từ nhánh đó chứ không phải từ các nhánh khác. Nếu vậy chúng ta đang gặp nguy hiểm!
Fredrick Gauss

1

Cú pháp sai, thay vào đó nên

svn merge <what(the range)> <from(your dev branch)> <to(trunk/trunk local copy)>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.