2011-09-01 26 views
5
  1. Tôi đã xóa một số tệp văn bản bằng cách sử dụng svn remove. Nhưng svn diff hiển thị khi xóa tất cả nội dung trong tệp. Áp dụng một bản vá của diff chỉ thay đổi nội dung, không loại bỏ các tập tin.Nhận bản vá có thể áp dụng sau khi thực hiện svn remove và svn rename

  2. Tôi đã đổi tên thư mục chứa tệp nhị phân bằng cách sử dụng svn rename. Một tập tin vá lỗi từ một bình thường svn diff không có gì.

How to make svn diff produce file that patch would apply, when svn cp or svn mv was used?

subversion diff including new files

Cả hai phương pháp trong các liên kết ở trên không chỉ sửa đổi các tập tin. Họ không bị xóa/đổi tên sau khi áp dụng bản vá. Có thể nhận được bản vá hoạt động cho các thay đổi ở trên không?

+0

Bạn đã đăng ký nội dung mà bạn áp dụng bản vá chưa? – JVerstry

+0

@JVerstry Tôi không hiểu câu hỏi của bạn. Tôi đã kiểm tra một bản sao khác nhau của repo svn và thử áp dụng các bản vá lỗi cho nó, để kiểm tra xem nó hoạt động. – Nufail

+0

Khi bạn áp dụng bản vá, thông tin chỉ được đăng ký trong các tệp .svn ẩn. Tuy nhiên, một tệp sẽ chỉ bị xóa SAU KHI bạn đăng ký bản sao khác của repo svn này. – JVerstry

Trả lời

5

Từ trang patch người đàn ông:

-E hoặc --remove rỗng-files Gỡ bỏ các file đầu ra được sản phẩm nào sau khi bản vá lỗi đã được áp dụng. Thông thường, tùy chọn này là không cần thiết, vì các bản vá có thể kiểm tra dấu thời gian trên tiêu đề để xác định của tôi cho dù tệp có tồn tại sau khi vá hay không. Tuy nhiên, nếu đầu vào không khác biệt về ngữ cảnh hoặc nếu bản vá tuân thủ nhập vào POSIX, bản vá sẽ không xóa các tệp bị vá trống trừ khi tùy chọn này được cung cấp. Khi miếng vá xóa một tệp, nó cũng có thể cố gắng loại bỏ bất kỳ thư mục tổ tiên trống nào.

1

Hãy thử điều này:

patch -p0 -E < 1.patch && svn rm `svn st -q | grep ^! | cut -c 9-` 
+0

Cảm ơn. Cách giải quyết này giải quyết vấn đề thứ nhất. – Nufail

1

Tôi nghĩ vấn đề thứ hai của OP là do một lỗi SVN đã được cố định trong SVN 1.7. Bạn thay đổi cấu trúc thư mục (di chuyển, đổi tên, xóa) và cam kết nó, nhưng khi sử dụng svn diff, bản vá có vẻ như "không làm gì cả".

Tôi gặp sự cố này khi xóa thư mục và các triệu chứng giống nhau nên tôi giả sử chúng tôi đang gặp cùng một lỗi "root". Đối với tôi, cập nhật cho svn 1.7 giải quyết nó, bởi vì svn 1.7 tạo ra diffs (patches) khác nhau.

Một số phiên bản của svn diff không đặt các tệp đã di chuyển/đổi tên/xóa trong phần khác biệt!

Xem: http://svn.haxx.se/dev/archive-2004-03/0333.shtml. Email được lưu trữ này từ danh sách SVN DEV cho thấy các nhà phát triển đã xác định được vấn đề này, đôi khi trước khi phát hành 1.0.1, hơn một thập kỷ trước. Nếu bạn làm theo các chủ đề, họ dường như khá quyết tâm để sửa chữa nó sau đó, nhưng ngay cả 1,6 cũng đã rời khỏi công cụ khác biệt. Tôi phải cập nhật lên 1.7.

Về cơ bản, nếu svn < 1.7 phát hiện thư mục là svn delete 'd, nó sẽ không tái xử lý và xử lý các con, nó sẽ dừng lại ở đó và không đặt bất kỳ thứ gì dưới cây đó vào ô khác. Đây không phải là những gì chúng tôi muốn, chúng tôi muốn loại bỏ rõ ràng cho tất cả các trẻ em, để miếng vá có thể, như đã đề cập trong câu trả lời khác, loại bỏ các tập tin và thư mục trống qua -E. Bản vá không thể làm bất cứ điều gì nếu tập tin không có trong bản vá.

Sử dụng svn 1.7 Tôi đã làm một khác biệt giống như tôi đã làm trước, nhưng mỗi tập tin dưới một thư mục đã xóa được rõ ràng trong các bản vá như có tất cả các dòng bỏ (trống), và sau đó patch/quilt loại bỏ thành công các tập tin và thư mục. Tôi giả định một cái gì đó tương tự cần phải xảy ra trong trường hợp của bạn với di chuyển hoặc đổi tên.

GOTCHAS: Nâng cấp lên 1.7 sẽ để bản sao làm việc của bạn vô ích. Đảm bảo bạn cam kết thay đổi của mình trước khi cập nhật. Sau đó, bạn phải kiểm tra tất cả mọi thứ một lần nữa. Chỉnh sửa: Máy khách SVN 1.7 có thể sửa đổi các thư mục làm việc của bạn nhưng nếu không, bạn có thể cần phải thanh toán lại. Chỉ cần lưu ý để bạn không bị mất việc.

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