在svn diff补丁中包含图像文件

9

我正在创建一个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个回答

3

SVN不支持在差异文件中包括二进制文件。另外一方面,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


2
Subversion 1.9允许使用svn diff --git而不是普通的svn diff来生成这样的补丁。 - Bert Huijben
1
@BertHuijben 即使使用 --git,它也拒绝对二进制文件进行差异比较。 - npostavs

3

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

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

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


它打印出路径的绝对路径。 - anton_rh

1

-1

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

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


SVN目前无法创建包含二进制数据的统一补丁文件。如果您检查补丁文件,例如在Visual Studio中,那里没有二进制数据。关于这个缺失功能的讨论可以在Subversion开发网站上找到:http://subversion.1072662.n5.nabble.com/Create-Apply-Patch-UTF-16-and-binary-support-td181079.html - Ron
@Ron 并不是说SVN不能生成像图像文件这样的二进制文件的统一差异文件,而是统一差异格式不包括表示两个二进制文件之间差异的方法。通常情况下,以文本格式表示的增量可能比文件的全新副本要大,除非变化非常小且局部化,即使对于像jpeg这样的压缩格式,文件之间的增量也可能很大,即使只有微小的变化。MPEG通过a)使用非常特定的关键帧格式和b)使用二进制格式的增量来解决了这个问题。 - Steve Barnes

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