Subversion差异包含新文件

20

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

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

我该如何制作一个包含新文件的补丁呢?


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

6
当文件二进制文件时,我真的很想知道这个问题的答案。 - Glyph
@Glyph:看这里:https://dev59.com/sW855IYBdhLWcg3wm1m3 - Gabriel Schreiber
4个回答

28

我遇到了与Pozsar类似的问题,他的答案比普通的svn diff --force 对我更有效。但是,如果在DOS机器上运行(例如通过Cygwin),您可能需要稍微修改他的答案。以下的diff + patch适用于在Cygwin中使用--binary参数修补文本和二进制文件:

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

patch -p0 --binary -i mybinarydiff.diff

12

diff命令有一个--force选项,但在我的计算机上,它会为二进制文件生成错误的补丁文件。不过,如果将其与--diff-cmd选项一起使用,则可以正常工作:

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

我认为这正好产生了您想要的结果。


6
很抱歉,您的文件是二进制文件,这正是它无法显示的原因。尽管Subversion在版本之间可以高效地处理二进制文件差异,但其diff命令仅执行文本差异/补丁操作。

1
糟糕!我不喜欢Subversion的另一个原因。如果有人需要替代方案,Git补丁可以顺利处理二进制文件。 - Stan Kurdziel

0

如果你正在构建一个补丁,你可能想要使用普通的'diff'命令,并使用--new-file选项,将缺失的文件视为空文件。

请注意,这个选项的语法实际上可能会因为你使用的普通diff版本而有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接