subversion diff including new files

2019-01-13 11:34发布

问题:

I have some local changes to an open source project which uses Subversion as its source control. (I do not have commit access on the original project repository.)

My change adds a file, but this file is not included in the output of "svn diff". (It may be worth noting that the new file is a binary, not plain text.)

How can I make a patch which includes the new files?


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

回答1:

The fact that your file is binary is exactly why it is not displayed I'm afraid. Subversion's diff command only does textual diffs/patches (even though Subversion internally can handle binary file differences efficiently between versions).



回答2:

I experienced similar behavior to Pozsar. And his answer worked for me better than the normal svn diff --force. However, if running on a DOS machine (e.g. via Cygwin), you may need to modify his answer slightly. The following diff + patch worked for patching my text + binary files in Cygwin using the --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


回答3:

There is a --force option to the diff command, but it produces an incorrect patch file for binaries on my machine. Using it with the --diff-cmd option works for me though:

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

I think this produces exactly what you wanted.



回答4:

If you're building a patch, you might want to use plain old 'diff' with the --new-file option which treats the missing file as empty.

Note that the syntax for this option may actually vary depending on what version of plain old diff you're using.



标签: svn patch