20

我对使用 Subversion 作为其源代码控制的开源项目进行了一些本地更改。(我没有原始项目存储库的提交访问权限。)

我的更改添加了一个文件,但该文件不包含在“svn diff”的输出中。(可能值得注意的是,新文件是二进制文件,而不是纯文本。)

如何制作包含新文件的补丁?


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

4 回答 4

28

我经历了与 Pozsar 类似的行为。他的回答比普通的 svn diff --force 更适合我。但是,如果在 DOS 机器上运行(例如通过 Cygwin),您可能需要稍微修改他的答案。以下 diff + patch 用于使用 --binary arg 在 Cygwin 中修补我的文本 + 二进制文件:

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

patch -p0 --binary -i mybinarydiff.diff
于 2010-02-12T23:46:35.700 回答
12

diff 命令有一个 --force 选项,但它为我的机器上的二进制文件生成了一个不正确的补丁文件。不过,将它与 --diff-cmd 选项一起使用对我有用:

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

我认为这正是你想要的。

于 2009-06-26T21:42:41.553 回答
6

恐怕您的文件是二进制文件的事实正是它不显示的原因。Subversion 的 diff 命令只执行文本差异/补丁(即使 Subversion 内部可以有效地处理版本之间的二进制文件差异)。

于 2008-10-01T22:20:27.923 回答
0

如果您正在构建补丁,您可能希望使用带有 --new-file 选项的普通旧 'diff' 选项,它将丢失的文件视为空文件。

请注意,此选项的语法实际上可能会有所不同,具体取决于您使用的普通旧差异版本。

于 2008-10-01T21:33:44.260 回答