【问题标题】:how does Git handle deltas of filesGit如何处理文件的增量
【发布时间】:2023-03-16 10:56:02
【问题描述】:

据我所知,Git 将文件的每个版本的内容存储在一个 blob 中,在具有文件名等的树中引用。 如果有 3 个文件内容完全相同,则这三个文件引用同一个 blob。 文件的新版本具有包含文件全部内容的新 blob。

现在,由于 Git 不存储增量,而是将每个版本的文件的全部内容存储在单独的 blob 对象中,这会导致存储空间增加吗?这是决定项目使用 Git 时需要考虑的主要问题吗? 另外,我对 Git 处理版本的理解是否正确?

【问题讨论】:

  • 哎呀..我发布得太早了。我看到 Pack (git gc) 定期执行此 deltafication。谢谢

标签: git


【解决方案1】:

在一个层面上,git 将对象存储为简单的文件,由它们的哈希索引。如果签入文件的新版本,它会获得一个新的哈希值,从而获得一个带有全新文件的新 blob。

在此之下,git 可以将 blob 组合并压缩成“包”,这些包中的 blob 可以通过 delta 压缩进行压缩。除了要求用户偶尔输入

git repack -a -d

或类似的,该过程对用户和存储结构是透明的。

在您的存储库上尝试上述命令,看看它如何影响您的 .git 目录的大小。

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2010-11-07
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多