2008-10-01 44 views
18

Tôi có một số thay đổi cục bộ cho dự án nguồn mở sử dụng Subversion làm kiểm soát nguồn của nó. (Tôi không có quyền truy cập vào kho lưu trữ dự án ban đầu.)subversion diff bao gồm các tệp mới

Thay đổi của tôi thêm tệp nhưng tệp này không được đưa vào đầu ra của "svn diff". (Có thể đáng lưu ý rằng tệp mới là tệp nhị phân chứ không phải văn bản thuần túy.)

Làm cách nào để tạo patch bao gồm các tệp mới?


$ svn st 
    A  tests/foo.zip 
$ svn diff 
$ 
+4

Tôi thực sự quan tâm đến câu trả lời cho câu hỏi này khi tệp * không * nhị phân. – Glyph

+0

@Glyph: hãy xem tại đây: http://stackoverflow.com/q/4248768/427532 –

Trả lời

6

Thực tế là tệp của bạn là nhị phân chính xác là lý do tại sao nó không được hiển thị tôi sợ. Lệnh diff của Subversion chỉ thực hiện các bản vá/bản vá văn bản (mặc dù Subversion trong nội bộ có thể xử lý sự khác biệt của tệp nhị phân một cách hiệu quả giữa các phiên bản).

+1

arg! một lý do khác tôi không thích lật đổ. git patches xử lý các tệp nhị phân một cách trơn tru nếu có ai đó cần một giải pháp thay thế –

0

Nếu bạn đang xây dựng một bản vá, bạn có thể muốn sử dụng đồng bằng cũ 'diff' với tùy chọn --new-file mà xử lý các tập tin bị mất tích như trống rỗng.

Lưu ý rằng cú pháp cho tùy chọn này thực sự có thể thay đổi tùy thuộc vào phiên bản cũ cũ khác nhau mà bạn đang sử dụng.

12

Có tùy chọn --force cho lệnh diff, nhưng nó tạo ra tệp vá lỗi không chính xác cho tệp nhị phân trên máy của tôi. Sử dụng nó với tùy chọn --diff-cmd hoạt động cho tôi mặc dù:

svn diff --force --diff-cmd /usr/bin/diff -x -au 

Tôi nghĩ điều này tạo ra chính xác những gì bạn muốn.

26

Tôi đã gặp phải hành vi tương tự như Pozsar. Và câu trả lời của anh ấy đã làm việc tốt hơn so với svn diff --force bình thường. Tuy nhiên, nếu chạy trên máy DOS (ví dụ: thông qua Cygwin), bạn có thể cần phải sửa đổi câu trả lời của mình một chút. Bản vá diff + sau hoạt động để vá các tệp nhị phân + văn bản của tôi trong Cygwin bằng cách sử dụng --binary arg:

svn diff --force --diff-cmd /usr/bin/diff -x "-au --binary" OLD-URL NEW-URL > mybinarydiff.diff 

patch -p0 --binary -i mybinarydiff.diff 
Các vấn đề liên quan