【问题标题】:Include image file in svn diff patch在 svn diff 补丁中包含图像文件
【发布时间】:2023-03-13 01:58:01
【问题描述】:

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

    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

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

【问题讨论】:

    标签: image svn diff patch


    【解决方案1】:

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

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

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

    【讨论】:

    • 打印补丁的绝对路径。
    【解决方案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

    【讨论】:

    • 如果您使用svn diff --git 而不是普通的svn diff,Subversion 1.9 允许生成此类补丁
    • @BertHuijben 即使使用--git 它也拒绝区分二进制文件。
    【解决方案3】:

    很遗憾,svn diff 不处理二进制数据。

    检查来自subversion diff including new files的一些答案

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • SVN 目前无法用二进制数据创建统一的补丁文件。如果您检查补丁文件,就像在 Visual Studio 中一样,那里没有二进制数据。在 Subversion 开发网站上有一个关于这个缺失功能​​的讨论:subversion.1072662.n5.nabble.com/…
      • @Ron 并不是说​​ SVN 不能生成二进制文件的统一差异文件,例如图像文件,而是统一差异格式不包含任何表示两个二进制文件之间差异的方法。一般来说,文本格式的 delta 可能比文件的新副本大,除非更改非常小且已本地化,即使对于 jpeg 等压缩格式,文件之间的 delta 也可能很大,即使对于未成年人改变。 MPEG 确实通过以下方式解决了这个问题:a) 对关键帧使用非常特定的格式 & b) 对增量使用二进制格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2011-05-14
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多