Git和二进制数据,最佳存储方法

ideaman42

不幸的是,我不得不在git中存储一些二进制文件,

但是,我可以选择将数据存储在磁盘上的方式-以Git(采用我们自己的格式,只有构建系统需要读取)。

我想避免过多地谈论细节,因为我认为它没有那么重要-但在某些情况下,这些图标文件很多,但是同一问题也适用于许多小型声音文件或3d模型。

将这些文件转换为一个大图像将是一个构建步骤,因此可以按照我们喜欢的方式在git中存储图像。

  • 二进制压缩(例如,PNG(图像),FLAC(声音))
  • 二进制未压缩(例如,PPM(图像),未压缩的WAV(声音))
  • 二进制数据的ASCII表示(例如,MIME编码,XPM(图像))

让我们假设某些文件偶尔会发生更改-因此避免为像素的每一次小更改都存储一个新的二进制Blob-会很好。

我有兴趣知道:

  • 每当二进制文件更改(甚至几个字节)时,哪些选项将存储一个全新的二进制blob。
  • git diff与未压缩的二进制数据相比,未压缩的数据好吗(即使对未压缩的数据进行较小的编辑,它也会发生很大的变化)。
  • 与一个大型二进制文件相比,假设一个文件定期进行修改,我假设存储许多小型二进制文件的长期开销较小,git可以有效地处理大型二进制文件的较小更改吗?

假设无法完全避免使用二进制文件,所有考虑过的事情是避免大型git repo(对二进制文件进行编辑)的最佳选择是什么?

星期二

每当二进制文件更改(甚至几个字节)时,哪些选项将存储一个全新的二进制blob。

他们都是。只要它们是“松散的对象”,所有的blob(实际上是仓库中的所有对象)都会“完整”(或多或少)存储。对它们进行的唯一操作是为它们提供标头,并使用deflate压缩对其进行压缩。

但是,与此同时,松散的物体最终会组合成“包装”。Git对文件包中的文件进行增量压缩:请参阅git二进制diff算法(增量存储)是否标准化?根据那里的答案,最好不要对二进制文件进行“预压缩”,以便打包文件增量算法可以找到匹配二进制数据的长字符串。

git diff与未压缩的二进制数据相比,未压缩的数据好吗(即使对未压缩的数据进行较小的编辑,它也会发生很大的变化)。

我没有尝试过,但总体含义是答案应该是“是”。

与一个大型二进制文件相比,假设一个文件定期进行修改,我假设存储许多小型二进制文件的长期开销较小,git可以有效地处理大型二进制文件的较小更改吗?

当然,所有完全不变的文件都将立即带有大量“重复数据删除”存储,因为它们的SHA-1校验和在所有提交中都是相同的,因此每个树在存储库中都命名相同的blob。如果foo.icon在数千次提交中相同,则仅存储一个blob(无论SHA-1是否用于foo.icon存储)。


我建议尝试一下:用建议的二进制文件创建一些虚拟测试存储库,进行建议的更改,并查看运行git gc以重新包装松散对象之前和之后存储库的大小。请注意,有很多可调参数。特别是,您可能想大惊小怪的windowdepthwindow-memory设置(可以在命令行或git config条目中设置)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

表示二进制数据的最佳方法

来自分类Dev

表示二进制数据的最佳方法

来自分类Dev

PCL存储和二进制数据

来自分类Dev

C ++中的数据抽象和二进制方法

来自分类Dev

在Azure上部署的.net Web应用程序中存储和执行二进制文件的最佳方法

来自分类Dev

以二进制形式存储和检索NSImage的最佳实践

来自分类Dev

在JavaScript中存储非常大的二进制数的最佳方法是什么?

来自分类Dev

在JavaScript中存储非常大的二进制数的最佳方法是什么?

来自分类Dev

将存储为 ASCII 的二进制数据转换为二进制

来自分类Dev

从文件解码和处理二进制字节的最佳方法

来自分类Dev

在Java中合并二进制文件的最佳方法

来自分类Dev

截断二进制数的最佳方法

来自分类Dev

在Java中合并二进制文件的最佳方法

来自分类Dev

Unix理念-避免将数据和程序存储在二进制文件中

来自分类Dev

如何从linux二进制文件中存储和检索数据

来自分类Dev

在__DATA__句柄中存储二进制数据

来自分类Dev

如何使用AnsiString存储二进制数据?

来自分类Dev

Blob二进制数据存储在哪里?

来自分类Dev

在lucene中存储未索引的二进制数据

来自分类Dev

在Google Secret Manager中存储二进制数据

来自分类Dev

数据如何以二进制形式存储?

来自分类Dev

将二进制数据存储在静态数组中

来自分类Dev

处理异构数据和大型“二进制”数据

来自分类Dev

查找基值和功效均为二进制的二进制值的功效的最佳算法是什么?

来自分类Dev

在小内存(小于50 MB)中存储大量二进制数的最佳方法是什么?

来自分类Dev

在python和c ++之间传递二进制数据

来自分类Dev

JSON和二进制数据-编码

来自分类Dev

POST中的nodejs / express和二进制数据

来自分类Dev

处理二进制数据和无符号字符

Related 相关文章

  1. 1

    表示二进制数据的最佳方法

  2. 2

    表示二进制数据的最佳方法

  3. 3

    PCL存储和二进制数据

  4. 4

    C ++中的数据抽象和二进制方法

  5. 5

    在Azure上部署的.net Web应用程序中存储和执行二进制文件的最佳方法

  6. 6

    以二进制形式存储和检索NSImage的最佳实践

  7. 7

    在JavaScript中存储非常大的二进制数的最佳方法是什么?

  8. 8

    在JavaScript中存储非常大的二进制数的最佳方法是什么?

  9. 9

    将存储为 ASCII 的二进制数据转换为二进制

  10. 10

    从文件解码和处理二进制字节的最佳方法

  11. 11

    在Java中合并二进制文件的最佳方法

  12. 12

    截断二进制数的最佳方法

  13. 13

    在Java中合并二进制文件的最佳方法

  14. 14

    Unix理念-避免将数据和程序存储在二进制文件中

  15. 15

    如何从linux二进制文件中存储和检索数据

  16. 16

    在__DATA__句柄中存储二进制数据

  17. 17

    如何使用AnsiString存储二进制数据?

  18. 18

    Blob二进制数据存储在哪里?

  19. 19

    在lucene中存储未索引的二进制数据

  20. 20

    在Google Secret Manager中存储二进制数据

  21. 21

    数据如何以二进制形式存储?

  22. 22

    将二进制数据存储在静态数组中

  23. 23

    处理异构数据和大型“二进制”数据

  24. 24

    查找基值和功效均为二进制的二进制值的功效的最佳算法是什么?

  25. 25

    在小内存(小于50 MB)中存储大量二进制数的最佳方法是什么?

  26. 26

    在python和c ++之间传递二进制数据

  27. 27

    JSON和二进制数据-编码

  28. 28

    POST中的nodejs / express和二进制数据

  29. 29

    处理二进制数据和无符号字符

热门标签

归档