在svn diff patch中包含图像文件

时间:2013-08-09 19:58:25

标签: image svn diff patch

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

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

查看以下答案:subversion diff including new files

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

答案 3 :(得分:0)

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

所以你被告知文件已经改变了,由你来决定你要如何比较它们 - 对于图像文件来说,最重要的区别之一就是人眼 - 你不会期望的修订控制系统,能够告诉你“这是一个皱着眉头的男人的照片,但现在是一个漂亮的红发啦啦队员微笑”你会吗?