2008-11-25 34 views
61

Kịch bản là:Làm thế nào để làm cho tập tin sản xuất svn diff vá lỗi sẽ áp dụng, khi svn cp hoặc svn mv đã được sử dụng?

  1. svn cp hoặc mv một số tập tin
  2. sửa đổi tập tin mà
  3. svn diff> mypatch

Trên máy tính khác (bản sao hoạt động tương tự, nhưng không có thay đổi):

  1. Hãy thử áp dụng mypatch.
  2. Không -> cố gắng sửa đổi tệp không tồn tại.

Làm cách nào để tạo bản vá lỗi vá lỗi bản vá lỗi svn diff, hoặc áp dụng sạch vá được tạo bởi svn diff trong trường hợp này? Tôi không thể cam kết. Tôi muốn bảo tồn mergeinfo (vì cách giải quyết rõ ràng là thêm tệp hoàn toàn mới, mà không cần kết nối với tệp trước đó).

Trả lời

63

Với phiên bản lật đổ, bạn có thể chỉ định loại nhị phân khác để sử dụng và thông số nào để truyền cho nó. Xem the manual trên svn diff.

Bạn muốn tạo một tệp bản vá thường xuyên từ một svn diff, vì vậy bạn muốn có svn diff trông giống như một diff thông thường. Hãy thử điều này:

svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch 
... 
patch -p0 < mypatch 

Bằng chứng về khái niệm:

echo "newline" >> README.txt 
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch 
cp README.txt README.txt.patched 
svn revert README.txt 
patch -p0 < mypatch 
diff README.txt README.txt.patched 

Không khác biệt trong hai tập tin sau khi vá.

+3

Điều này không hoạt động nếu có thay đổi về tài sản giữa các nhánh mặc dù. –

+6

Điều này không hiệu quả đối với tôi. Tệp bản vá được tạo ra vẫn hiển thị tệp được sao chép dưới dạng sửa đổi tệp gốc (ví dụ: tệp có các dòng bắt đầu bằng - cũng như các dòng không bắt đầu bằng - hoặc +). Hơn nữa, một nỗ lực trong sản lượng vá: "12 trong số 14 hunks FAILED - tiết kiệm từ chối để tập tin". Bạn đã thử điều này với một tệp nguồn thực sự có nội dung và tệp đích có nội dung khác với tệp nguồn phải không? –

+1

tôi đang tìm kiếm chính xác điều tương tự, và điều này làm việc một sự quyến rũ, nhờ – nivanka

0

Nếu không hiểu rõ trường hợp cụ thể bạn đang cố gắng làm việc khi khó xác định lý do bạn muốn thực hiện việc này. Tôi có cảm giác bạn đang cố gắng thực hiện các thay đổi được kiểm soát trong một môi trường bị cô lập để tránh ảnh hưởng đến người dùng/ứng dụng khác.

Bạn có thể giải quyết vấn đề này không;

  • Tạo một chi nhánh cho mã của bạn thay đổi
  • Thực hiện bản sao của bạn/di chuyển và thay đổi nào trên các chi nhánh
  • Lấy bên kia để chuyển sang chi nhánh mã mới này và tiếp tục chia sẻ chi nhánh này

Khi bạn đã đồng ý với các thay đổi hợp nhất trở lại vào thân cây bằng cách sử dụng đối số --reintegrate và rm nhánh?

này sẽ * Duy trì merge-info * Xác định sao chép/di chuyển và thay đổi trong điều khiển phiên bản * Tuy nhiên cô lập thay đổi từ những người dùng khác * Sẽ ngăn chặn những thay đổi không đầy đủ trong bước 2 là một vấn đề như bạn chỉ có thể bổ sung thêm thay đổi và cập nhật

5

Bạn đã thử tùy chọn --show-copies-as-adds được đề cập trên trang web svn diff và được mô tả trên trang svn options ?.

8

Nếu bạn muốn thoát khỏi các thuộc tính svn cũng như trong các bản vá lỗi của bạn, có một lựa chọn cho rằng:

svn diff --patch-compatible > mypatch.diff 

svn help diff nói:

--patch-compatible : generate diff suitable for generic third-party 
         patch tools; currently the same as 
         --show-copies-as-adds --ignore-properties 

Patches tạo ra theo cách này có nghĩa vụ để tương thích với tiện ích cũ đồng bằng cũ patch.

+2

Điều này đến gần kết quả mong đợi hơn so với câu trả lời với nhiều phiếu bầu hơn. Điều này thực sự loại bỏ nội dung từ tệp đã được di chuyển và thêm sửa đổi chính xác cho tệp mới. Nhưng nó cho thấy các tập tin ban đầu chỉ đơn giản là sửa đổi và không có nội dung, và tập tin mới như một tập tin không phiên bản. Tuy nhiên, đây là câu trả lời hay nhất mà tôi thấy cho đến câu hỏi ban đầu. – DevDaddyNick

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