【问题标题】:How can git compact files so much? [duplicate]git怎么能压缩文件这么多? [复制]
【发布时间】:2020-01-28 09:52:30
【问题描述】:

我有一个旧的 .NET 项目,其中包含大量 DLL(并且没有像 NuGet 这样的包管理器)。

文件的总大小约为 1.5 Go

当我用这个项目初始化一个 git 存储库时,.git 的总大小

更新:挖掘@mvp评论后,我发现这个项目中的一些dll重复了多达20次。

$ find . -name '*.dll' -exec basename {} \; > dlls
$ cat dlls | sort | uniq -c | sort -nr | awk '{ print $2, $1 }'

等待一些关于 git 如何识别“重复”并管理它们的答案。

【问题讨论】:

  • 也许您有很多重复文件? git 旨在永远不会在对象存储中保留重复的对象。但是内部的 git 压缩也很不错。
  • 我正在执行一些 bash 命令来检查这一点,但您可能已经找到了解释,因为我的“项目”由多个模块组成,并且这些模块具有共同的依赖关系。你能把它作为答案,并添加一个关于 git 如何存储重复的解释的链接吗? (基于名称?哈希?名称+哈希?)
  • Git 对您的所有内容进行哈希处理,并仅比较哈希值(实际上不是文件内容)以检测更改。这就是使 git 快速的原因。作为副作用,您可以获得免费的重复检测(文件哈希匹配)
  • 哈希基于文件的内容。它是内部“blob 内容”的校验和,即文件加上​​ Git 需要知道内部对象类型(“blob”)和压缩前大小的小标题。哈希当前是 SHA-1,但 Git 现在正在转换为使用其他算法。
  • 我认为我提出的问题(我的用例)与其他两个应该相同的问题明显不同。将它保存在 SO 中作为此 git 结构知识的入口点应该很有用。

标签: .net git


【解决方案1】:

因为没有人愿意在这里写下他们的答案:

git 为每个文件创建一个哈希,并且只将所有具有相同哈希的文件存储一次,无论是来自不同修订版的具有相同哈希的文件,还是来自不同目录中相同修订版的具有相同哈希的文件。

【讨论】:

    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2020-11-17
    • 2014-09-04
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多