8

我正在创建一个 svn diff 补丁,但似乎没有包含图像文件。该补丁包含每个图像文件的类似行,如下所示:

    Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif
===================================================================
--- crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (revision 1510040)
+++ crimgeoprofile/code/jquery/css/ui-lightness/images/animated-overlay.gif (working copy)

我正在使用以下命令来创建补丁:

svn diff > test.diff

任何有关如何包含图像文件的建议将不胜感激。

4

4 回答 4

3

使用 Suversion 1.9,您可以使用 --git 标志将二进制内容包含到补丁文件中,例如:

svn diff https://storage/svn/project/trunk --git -c 42 > patch-42.diff

Subversion 1.8 已经有 --git 标志,但忽略二进制内容。

于 2016-07-08T07:32:54.867 回答
2

SVN 不支持在 diff 中包含二进制文件。附带说明:git 确实支持二进制文件。生成的补丁文件如下所示:

diff --git a/bin/windows/SDL_mixer.dll b/bin/windows/SDL_mixer.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f48ee2da696f92b66940b91b52aa53c2
GIT binary patch
literal 160256
zcmd?S4SZD9)i*kmOyYopCrYBxf<%o9l`2uFL_&=TgA|RT7>j7Ev^CX7sg%wregu+E
z26K8G$kPW}+uD|hZFwrKv_*(YAs@UMf~XNJW(<Ug6wVlm;iDl0WbXgJ_BoSD06*UQ
z-h1DBFF(yWXYaMwUVE*z*Is+=k13j2?MQYw94`DHi#Z&%c=BJq{Qc}d<;Xr~#Ovoc
zRu6jXl3M4jZ(VZNLl6HbYtG!qzCU-??5yw3`oRw#^JRVK!K}IdA7nlJgRDunPtThD

所以从技术上讲这可能的,它只是不适用于 svn。因此,如果您迫切需要包含二进制文件的补丁文件,请考虑使用 git 检查 svn。这很容易:git svn clone http://path/to/svn。也与svn://.... 然后,您可以创建一个 git diff,并将该 diff 应用于任何目标。目标不需要是 git 存储库。git apply my.patch

于 2014-03-06T12:46:04.603 回答
1

不幸的是,svn diff 不处理二进制数据。

检查一些答案:subversion diff包括新文件

特别是:https ://stackoverflow.com/a/2255846/9822

于 2013-08-09T20:02:27.537 回答
0

图像文件正在包含在您的差异中,如 --- 和 +++ 行所示,但它们作为整个文件包含在补丁中 - 这部分是由于如何有意义地显示二进制数据中的更改的问题例如纯文本格式的图像 - 除非您想要十六进制差异的页面(例如fc -b a.gif b.gif会产生)。

因此,您被告知文件已更改,您可以决定如何比较它们 - 对于图像文件,人眼是显着差异的最佳比较之一 - 您不会期望修订控制系统能够告诉你“这是一个秃头男人皱着眉头的照片,但现在它是一个漂亮的红发啦啦队长微笑”你会吗?

于 2013-08-10T07:39:36.767 回答