美文网首页
Git的存储机制

Git的存储机制

作者: 科研者 | 来源:发表于2020-01-30 14:38 被阅读0次

快照记录的是不是文件的每一个版的全部内容,而不是内容的变更信息? 如果这样,岂不是耗费很大的存储空间?

答:
git在正确的抽象层次上处理存储空间压缩,使得程序比上代(如svn)和同时代(如bzr)的VCS大为简化。

之前的VCS从节省空间出发,想当然地把delta作为基础数据结构。这样的最大问题(远不是唯一问题)是:delta设计时没有考虑到的修改方式就无法表达。例如,svn早期版本及更早的VCS不能记录文件rename/copy,所以只要重命名文件,列出历史时重命名之前的历史就显示不出来。

git的存储层(plumbing layer)提供的接口里,每个commit都记录完整的目录树。存储空间压缩问题完全在存储层内部解决:

  1. 逻辑上,存储层是一个CAS(Content-Addressable Storage)。这意味着在一个commit中,所有没改变的文件和目录都不额外占用存储空间。进一步,两个目录中内容相同的文件也只占用一份存储空间;甚至,两个文件的任意两个历史版本只要内容相同,就只占用一份存储空间。这是基于delta的VCS做不到的。
  2. 而对于同一个文件的历史版本的压缩,git的做法是把全部文件的历史版本统一处理,把文件间相同的片段进行压缩。这意味着两个不相干的文件中相同的片段也可以被压缩。这是基于delta的VCS做不到的。

相关文章

相关文章

  • git存储机制

    现在项目基本都采用git来进行版本控制,最近比较好奇git的存储机制到底是怎么样的,研究了一下 简单介绍git最重...

  • Git的存储机制

    快照记录的是不是文件的每一个版的全部内容,而不是内容的变更信息? 如果这样,岂不是耗费很大的存储空间? 答:git...

  • 浅析Git存储—对象、打包文件及打包文件索引

    存储是Git完成其他各种功能的基础,本质上是将系统中的文件按一定格式生成版本快照。对Git的存储机制进行一定程度的...

  • git

    存储机制 组件比较 区域划分 图1:4 types of git object 图2:文件修改--hash码变化 ...

  • Git-10: commit、tree、blob

    李文轩 2019-02-22声明:这是本人学习极客时间的Git三剑客的笔记,有侵权请联系我。 Git 的存储机制(...

  • iOS 备忘录模式(简单使用)

    备忘录模式设计存储中心,指定存储接口,实现存储机制。优化存储方案统一存储规范,实现灵活多变的存储机制。 FastC...

  • 上传超过100M的文件到github

    Git大文件存储将帮助Git处理大型二进制文件 GitHub宣布,作为开源的Git扩展,Git大文件存储(Larg...

  • Git Objects

    Git 如何存储对象 通过 Ruby 脚本语言存储一个 git blob 对象 参考: https://git-s...

  • GIT入门

    git 学习笔记 1、Git 和 SVN的区别是什么。 三个区别:【存储】、【使用】、【管理】 存储:Git是对修...

  • Git学习笔记(2) --- References探寻

    在上一篇文章Git学习笔记(1) --- 内部存储模式中,已经说了git的内部存储模式以及.git/objects...

网友评论

      本文标题:Git的存储机制

      本文链接:https://www.haomeiwen.com/subject/qkvithtx.html