SVN cách giải quyết xung đột cây mới khi tệp được thêm vào hai nhánh


95

Khi hợp nhất một vài nhánh (sử dụng SVN 1.6.1) trong đó tệp đã được thêm vào cả hai nhánh (và sau đó làm việc trên các nhánh riêng biệt đó), tôi nhận được một trong những xung đột cây mới:

      C foo.txt
  >   local obstruction, incoming add upon merge

Tôi cần các thay đổi từ cả hai nhánh, nhưng xung đột cây không cung cấp cho tôi các tệp .working, .merge-left & .merge-right thông thường - điều này có thể hiểu được do bản chất của xung đột. Có khá nhiều xung đột trong số này và những xung đột xảy ra khi xóa cùng một tệp trên mỗi nhánh, nhưng chúng rất đơn giản để giải quyết.

Tôi có thể giải quyết vấn đề này như thế nào? Sách đỏ của SVN (dành cho 1.6) không đề cập đến tình huống này.

Câu trả lời:


40

Như đã được đề cập trong phiên bản cũ hơn (2009) của tài liệu thiết kế "Xung đột Cây" :

XFAIL xung đột từ việc hợp nhất tệp thêm vào phiên bản

Thử nghiệm này thực hiện một hợp nhất mang lại một tệp bổ sung không có lịch sử vào một tệp đã được tạo phiên bản hiện có .
Đây sẽ là một xung đột cây trên tệp của giống ' local obstruction, incoming add upon merge'. Đã sửa các kỳ vọng trong r35341.

(Nhân tiện, đây còn được gọi là "cặp song sinh ác" trong ClearCase):
một tệp được tạo hai lần (ở đây được "thêm" hai lần) trong hai nhánh khác nhau, tạo ra hai lịch sử khác nhau cho hai phần tử khác nhau, nhưng có cùng tên.

Giải pháp lý thuyết là hợp nhất các tệp đó theo cách thủ công (bằng công cụ khác biệt bên ngoài) trong nhánh đích 'B2 '.

Nếu bạn vẫn đang làm việc trên nhánh nguồn, tình huống lý tưởng sẽ là xóa tệp đó khỏi nhánh nguồn B1, hợp nhất trở lại B2để B1hiển thị tệp đó B1(sau đó bạn sẽ làm việc trên cùng một phần tử).
Nếu không thể hợp nhất lại vì quá trình hợp nhất chỉ xảy ra từ B1đến B2, thì việc hợp nhất thủ công sẽ là cần thiết cho mỗi lần B1->B2hợp nhất.


2
Các "cuộc xung đột cây" thiết kế doc là liên kết mục nát :(
whitey04

4
Điều buồn cười là ngay cả khi cả hai tệp được thêm vào giống hệt nhau, chúng vẫn hiển thị là xung đột. Điều này thực sự không nên được gắn cờ là một cuộc xung đột.
SantiBailors

1
@SantiBailors Thật buồn cười, tôi đang chết ngay bây giờ. Chết vì người bạn cũ của tôi git ...
Winter

163

Tôi đã tìm thấy một bài đăng đề xuất một giải pháp cho điều đó . Nó sắp chạy:

svn resolve --accept working <YourPath>

điều này sẽ xác nhận các tệp phiên bản cục bộ là OK.
Bạn có thể chạy nó cho một tệp hoặc toàn bộ danh mục dự án.


2
Cảm ơn, này cũng giải quyết: C foo.txt> add địa phương, add đến khi cập nhật
lazysoundsystem

5
nhờ nó làm việc cho tôi là tốt nhưng tôi đã phải làm điều này: quyết tâm svn --accept FILENAME làm việc
ajacian81

5
vâng bạn cần một tên tệp. Nó chấp nhận '.' (thư mục hiện tại). Tôi cũng cần thực hiện điều này một cách đệ quy vì vậy: "svn Resolution --accept working --recursive." giải quyết tất cả những gì có lợi cho bản sao làm việc của bạn (! nguy hiểm Bạn có thể thổi đi những thay đổi của người khác khi bạn làm điều này, như mọi khi giải quyết mâu thuẫn)
Harry Gỗ

Tôi sử dụng một bí danh tôi đã tạo ra danh sách tất cả các file cây mâu thuẫn: alias mtc='stat | awk "BEGIN { FS=\" \" } /^.{6}C/ { print \$NF }"' Sau đó, tôi có thể sử dụng như là đối số cho lệnh quyết tâm, như thế này: svn resolve --accept working $(mtc)
Earl Jenkins

1
Trong thực tế, bạn cần phải thể chỉ định cũng như tài nguyên: svn resolve --accept working path/index.html
Tomasz Kuter

9

Điều gì sẽ xảy ra nếu những thay đổi sắp tới là những thay đổi bạn muốn? Tôi không thể chạy giải quyết svn - chấp nhận của họ đầy đủ

svn giải quyết - cơ sở chấp nhận


4
Tôi nghĩ rằng tôi đã hiểu sai câu hỏi. 'base', thực sự, tương đương với 'theirs-full' khi sử dụng 'svn Resolution' nhưng nó không giải quyết được vấn đề của bạn. Thay vào đó, những gì tôi đã làm là chia nó thành hai phần: 1) Xóa thư mục (hoặc tệp) xung đột cục bộ của tôi, 2) Hợp nhất. Điều này sẽ chạy mà không có xung đột và vì 'những thay đổi sắp tới là những thay đổi bạn muốn', tôi sẽ không quan tâm đến các mục đã xóa
Gabriel FT Gomes

2

Tôi chỉ cố gắng thu xếp bản thân khá kỹ lưỡng khi cố gắng làm theo lời khuyên của user619330 ở trên. Tình huống là: (1): Tôi đã thêm một số tệp trong khi làm việc trên nhánh ban đầu, nhánh1; (2) Tôi đã tạo một nhánh mới, nhánh2 để phát triển thêm, phân nhánh nó khỏi nhánh và sau đó hợp nhất trong các thay đổi của tôi từ nhánh1 (3) Một đồng nghiệp đã sao chép các mod của tôi từ nhánh1 sang nhánh của chính anh ấy, thêm các mod khác, và sau đó hợp nhất trở lại thân cây; (4) Bây giờ tôi muốn hợp nhất những thay đổi mới nhất từ ​​thân cây vào nhánh làm việc hiện tại của tôi, nhánh2. Đây là với svn 1.6.17.

Việc hợp nhất có xung đột cây với các tệp mới và tôi muốn phiên bản mới từ thân cây nơi chúng khác nhau, vì vậy từ một bản sao sạch của branch2, tôi đã thực hiện xóa svn các tệp xung đột, thực hiện các thay đổi branch2 này (do đó tạo ra một phiên bản của branch2 không có các tệp được đề cập), và sau đó tôi đã hợp nhất từ ​​thân cây. Tôi làm điều này vì tôi muốn lịch sử khớp với phiên bản thân để sau này tôi không gặp thêm vấn đề khi cố gắng hợp nhất lại với thân cây. Hợp nhất diễn ra tốt đẹp, tôi nhận được phiên bản thân của tệp, svn st hiển thị tất cả đều ổn, và sau đó tôi gặp nhiều xung đột cây hơn trong khi cố gắng thực hiện các thay đổi, giữa việc xóa tôi đã thực hiện trước đó và thêm từ hợp nhất. Có phải svn đã giải quyết các xung đột có lợi cho bản sao làm việc của tôi (hiện đã có phiên bản thân của các tệp) và bắt nó phải cam kết.

Ồ không. Bản cập nhật của một bản sao khác của branch2 dẫn đến phiên bản cũ của tệp (hợp nhất thân trước). Vì vậy, bây giờ tôi có hai bản sao làm việc khác nhau của branch2, được cho là đã cập nhật lên cùng một phiên bản, với hai phiên bản khác nhau của tệp và cả hai đều nhấn mạnh rằng chúng đã được cập nhật đầy đủ! Kiểm tra một bản sao rõ ràng của branch2 dẫn đến phiên bản cũ (pre-trunk) của các tệp. Tôi cập nhật thủ công những thứ này lên phiên bản trung kế và thực hiện các thay đổi, quay lại bản sao làm việc đầu tiên của mình (mà từ đó tôi đã gửi các thay đổi trung kế ban đầu), cố gắng cập nhật nó và bây giờ gặp lỗi tổng kiểm tra trên các tệp được đề cập. Thổi bay thư mục đang được đề cập, nhận một phiên bản mới thông qua cập nhật, và cuối cùng tôi có những gì nên là một phiên bản tốt của branch2 với các thay đổi thân cây. Tôi hi vọng. Nhà phát triển báo trước.

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.