包含新文件的Subversion差异

时间:2020-03-06 14:59:56  来源:igfitidea点击:

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

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

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

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

解决方案

如果要构建补丁程序,则可能要使用带有--new-file选项的普通旧'diff',它将丢失的文件视为空文件。

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

恐怕文件是二进制文件,这就是为什么它不显示的事实。 Subversion的diff命令仅执行文本差异/补丁(即使Subversion在内部可以有效地处理版本之间的二进制文件差异)。

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

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

我认为这正是我们想要的。

我经历过与Pozsar类似的行为。而且他的回答对我来说比普通的svn diff --force更好。但是,如果是在DOS机器上运行(例如通过Cygwin),则可能需要稍微修改一下他的答案。以下diff +补丁用于使用--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