我对一个使用Subversion作为源代码控制的开源项目进行了一些本地更改。(我没有对原始项目仓库进行提交访问权限。)
我的更改添加了一个文件,但这个文件在"svn diff"输出中没有包含。(值得注意的是,新文件是二进制而不是纯文本。)
我该如何制作一个包含新文件的补丁呢?
$ svn st
A tests/foo.zip
$ svn diff
$
我对一个使用Subversion作为源代码控制的开源项目进行了一些本地更改。(我没有对原始项目仓库进行提交访问权限。)
我的更改添加了一个文件,但这个文件在"svn diff"输出中没有包含。(值得注意的是,新文件是二进制而不是纯文本。)
我该如何制作一个包含新文件的补丁呢?
$ svn st
A tests/foo.zip
$ svn diff
$
我遇到了与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
diff命令有一个--force选项,但在我的计算机上,它会为二进制文件生成错误的补丁文件。不过,如果将其与--diff-cmd选项一起使用,则可以正常工作:
svn diff --force --diff-cmd /usr/bin/diff -x -au
我认为这正好产生了您想要的结果。
如果你正在构建一个补丁,你可能想要使用普通的'diff'命令,并使用--new-file选项,将缺失的文件视为空文件。
请注意,这个选项的语法实际上可能会因为你使用的普通diff版本而有所不同。