2009-10-20 34 views
20

Tôi đã tiếp quản một dự án phần mềm và quyết định đặt mọi thứ theo SVN (trên Assembla) bằng cách sử dụng Tortoise SVN. Thân cây nằm dưới ROOT. Vì vậy, thân cây chứa toàn bộ ứng dụng (mà tôi đã gắn thẻ 1.0). Đối với tính năng lớn đầu tiên của tôi, tôi đã tạo một chi nhánh có tên là "dev".Làm cách nào để 'khắc phục' xung đột chi nhánh/cây SVN?

Tôi có thể hợp nhất các thay đổi trong nhánh thân thành chi nhánh nhà phát triển mà không gặp sự cố (vì tôi đã thực hiện các sửa lỗi nhỏ). Khi tính năng của tôi hoàn tất, tôi đã hợp nhất lại vào nhánh thân cây. Tất cả mọi thứ đã được làm việc vây đến thời điểm này. Mã mới trong ROOT cho thấy tính năng mới đúng cách. Nhưng sau đó tôi đã thực hiện một cam kết (của kết quả của việc hợp nhất) và bây giờ mỗi khi tôi cố gắng để làm một hợp nhất từ ​​gốc hoặc từ chi nhánh dev, SVN phàn nàn về "xung đột cây" trên nhiều tập tin. Ngay cả các tệp mà tôi không chạm từ khi hợp nhất. Tôi đã cố gắng giải quyết các xung đột, không thành công.

Tôi là nhà phát triển duy nhất, vì vậy tôi không thực sự quan tâm đến những thay đổi lớn đối với kho lưu trữ. Nhưng tôi vẫn muốn giữ lịch sử của tất cả các tệp nếu có thể.

Cách tốt nhất để khắc phục sự cố này là gì? Có cách nào tôi có thể gắn thẻ tất cả các tập tin mới nhất trong thân ROOT như là phiên bản "xác định" của tập tin?


[EDIT] Xem thêm thông

  1. Vâng, 'chính' và 'thân' là điều tương tự. Tôi đã làm rõ câu hỏi của mình
  2. Khi bạn hợp nhất lại từ nhánh tính năng, trước tiên bạn có thực hiện việc hợp nhất khác từ thân cây để loại bỏ các thay đổi thân mới nhất không? "Có. Thân cây đã được cập nhật. Và nhánh dev đã có
  3. "tất cả mọi thứ đã bị vướng vào cam kết": Ý tôi là cam kết là tốt, nhưng sau đó ngay khi tôi bắt đầu hợp nhất từ ​​thân cây/đến thân cây, SVN phàn nàn về ' xung đột cây.
  4. tôi có hơn 200 cuộc xung đột cây. vì vậy, những gì tôi đang tìm kiếm là một 'chấp nhận tất cả' lệnh

[EDIT] giải pháp elhoim không khắc phục được sự cố của tôi. Tuy nhiên, ông đã đúng với các vấn đề phiên bản SVN. Hiện tại (2009-10-28), Assembla đang sử dụng SVN v1.5.1 và TortoiseSVN của tôi là v1.6. Vì vậy, đó là lý do tôi đã có rất nhiều xung đột cây. Tôi đã thử sử dụng giải pháp như được cung cấp bởi liên kết của elhoim và nó không hoạt động (tôi đã thử một bó hợp nhất nhiều lần trước khi thử hợp nhất HEAD-to-HEAD. Một số tệp không được chuyển sang nhánh gốc vì điều đó).

Thấy rằng việc hợp nhất HEAD-to-HEAD sẽ không hoạt động, tôi đã quyết định xóa tất cả các tệp ".svn" trong thư mục chi nhánh của tôi, sao chép tệp vào thư mục ROOT và thực hiện cam kết.

+0

@eldimo: khi bạn hợp nhất 'chính' thành 'dev', là nhánh 'chính' giống với thân cây? Hoặc có những thay đổi đang ngồi trong 'chính' mà thân cây chưa thấy chưa? – dls

+1

@ dls: Tôi nghĩ anh ấy sử dụng thuật ngữ "chính" và "thân cây" có nghĩa là cùng một nhánh. –

+0

@eldimo: Cần một số chi tiết để rõ ràng hơn: 1. Khi bạn sáp nhập trở lại từ nhánh tính năng, trước tiên bạn có thực hiện việc hợp nhất khác từ thân cây để loại bỏ các thay đổi thân mới nhất không? 2. Ý của bạn là "mọi thứ đã bị vặn lên" khi cam kết? Có thể cung cấp thông báo lỗi mà bạn nhận được trong quá trình cam kết không? –

Trả lời

6

Có vẻ như một số thay đổi được thực hiện ở cấp cấu trúc thư mục trên thân cây không được hấp thụ vào nhánh dev trước khi cố gắng hợp nhất lại vào trong thân cây. Điều này có thể đã gây ra xung đột cây trong trường hợp của bạn.

Tôi thấy phần này của sách SVN rất hữu ích và nó chứa các phương pháp giải quyết một tình huống như của bạn. Hi vọng điêu nay co ich. http://svnbook.red-bean.com/nightly/en/svn.tour.treeconflicts.html

[EDIT] BỔ SUNG INFO:


Các bạn đã chạy svn giải quyết trên không gian làm việc mà bạn thực sự ghi đè lên/giải quyết các phiên bản mâu thuẫn? Có thể có các tệp/thư mục vẫn được đánh dấu "xung đột" trên không gian làm việc có vấn đề của bạn (do bạn đã thực hiện hợp nhất) - Vì vậy, một khi bạn đã xem qua và giải quyết xung đột bằng tay, bạn có thể chạy svn "resolve". Tôi sử dụng máy khách dòng lệnh subversion cho các hợp nhất của tôi - nhưng tôi đã xác minh và tùy chọn này cũng có sẵn trên rùa. Điều này sẽ loại bỏ trạng thái xung đột và cho phép bạn tiếp tục. chúc may mắn.

5

Nói chung, hỗ trợ hợp nhất của SVN chỉ có thể xử lý bằng cách sử dụng chi nhánh tính năng sau khi. Đó là, bạn làm việc trong nó và kết hợp các thay đổi từ thân cây vào nó, và sau đó sử dụng svn merge --reintegrate để hợp nhất nó trở lại vào thân cây khi bạn đang thực hiện.

Sau đó, nếu bạn muốn tiếp tục làm việc, bạn cần tạo một nhánh mới để làm việc. Tôi nghĩ rằng bạn có thể xóa cái cũ và tạo một cái mới ở vị trí của nó mà không làm mất dữ liệu nếu bạn muốn giữ cùng một đường dẫn kho lưu trữ, nhưng bạn có thể muốn thử với repo kiểm tra trước tiên trong trường hợp thông tin svn:merge bị lỗi.

Điều này không hoàn hảo. Xem this post từ khi ngữ nghĩa hợp nhất hiện tại được giới thiệu để biết thêm thông tin chi tiết.

Ngoài ra, hãy cẩn thận khi sử dụng svn cp hoặc svn mv cho các mục đích khác ngoài nhánh và hợp nhất - nếu bạn làm như vậy, bạn sẽ cần xóa thuộc tính giả mạo svn:merge (trên cả nhánh và thân nếu cần) trước khi chạy reintegrate hoặc nó sẽ thất bại sẽ thông điệp xung đột cây.

Trên toàn bộ, nhánh và hợp nhất của svn vẫn còn khá yếu so với nhóm VCS phân tán (git, hg, bzr, darcs, v.v.), nhưng nếu bạn làm theo các hướng dẫn này thì nó sẽ thực hiện công việc.

+1

Chúng tôi đã gặp vấn đề này kể từ 1.7 và tôi thấy chú thích trong sách đỏ của SVN trực tiếp rằng chức năng 'nhấn hoặc bỏ lỡ' này là 1.5 và 1.6 đôi khi phát hiện rõ ràng và sửa chữa nó cho bạn. Vì vậy, nó có vẻ là giải pháp thực sự duy nhất sau khi bạn đã sáp nhập một nhánh tính năng (hoặc nhánh phát hành CI, trong trường hợp của chúng ta) trở lại thân cây một lần với xung đột cây, điều tốt nhất cần làm là thổi đi nhánh ban đầu và tạo một nhánh mới. .. Nhưng chờ đã, điều đó sẽ không hiệu quả với CI! Phải làm gì ?! –

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