如何使用diff获取小增量文件(文件更改)?

时间:2014-05-12 08:02:25

标签: git svn diff

我想生成delta文件,即。包含2个文件之间的更改的文件,这些文件很小。

但是,当我使用-u格式运行diff实用程序来创建统一格式的diff文件时,文件大小太大。

我有2个文本文件,其内容如下所示

1.txt:“hello1234”

2.txt:“hello5678”

运行“diff -u 1.txt 2.txt”时,生成的diff文件为182字节,如下所示:

--- 1.txt 2014-05-12 03:54:58.000000000 -0400

+++ 2.txt 2014-05-12 03:55:03.000000000 -0400

@@ -1 +1 @@

-hello1234

\文件末尾没有换行符

+ hello5678

\文件末尾没有换行符

与只有9个字节的原始文件相比,这是巨大的。

是否有一个实用程序或其他方法生成比源文件小的diff文件(例如svn / git实用程序)?

目的是在文件更新的情况下通过网络传输这些增量文件,而不是传输整个文件本身。

1 个答案:

答案 0 :(得分:0)

如果你想要" delta"文件,不要使用diff / patch它们并不是真正意义上的用途(特别是diff -u,正常模式稍微简洁一些)。 您应该使用xdelta,bsdiff或类似的东西(即二进制导向)。面向字符的文本差异可能比简单diff更好。

有些情况下,无法比重复整个文件更有效地表达更改(某些文件包含具有不可预测位置的高密度更改)。你的情况是这样的,好消息是典型案例确实比这更好,即使在数据库或复杂的源代码上也是如此。

有很多情况下delta不起作用:加密或压缩文件。在这种情况下,应该在解密/解压缩版本上计算文件增量。