为了把术语解释snapshot清楚。请允许我介绍另外两件事
git松散对象格式
git 包文件
假设我们有一个名为“a.txt”的文件,其内容是 git 控制下的十个“a”字母。我们提交这个文件后,它会在 .git/objects 路径下创建三个文件夹,每个文件夹都有一个文件。每个文件都是SNAPSHOT。
每个文件夹有一个文件
现在我们编辑 a.txt 文件看看会发生什么
我们将第一个字母“a”更改为字母“b”
-->>
然后承诺!
Git在三个新文件夹下创建了另外三个新文件
这三个新文件也是SNAPSHOT
每次我们执行 COMMIT 时,git 都会将快照保存到磁盘,而不是同一文件的新版本与旧版本之间的增量。即使我们只是更改了一个文件的一个字母,git 也会将整个文件保存为快照。
这也称为松散对象格式。
在这种情况下,git 将比其他 vcs (例如 subversion)占用更多的磁盘空间 ,从而节省了同一文件的新版本与旧版本之间的增量。但使用的好处是snapshot缩短了commit阶段时间。
但是在这之后,出色的 git 会git gc不时地做另一项工作,它创建PACKFILES并删除内容相似的快照以缩小自身的大小。完成这些工作后git gc,git 的磁盘成本将与其他使用 delta 方式的 VCS 一样。
通过snapshot和git gc。Git 将比其他在commit阶段使用 delta 方式的 VCS 更快,并且磁盘大小与使用 delta 方式的其他 VCS 相似。
Git 在性能和磁盘空间成本之间找到了一种平衡的方式。
吉特是最好的
包文件位于 .git/objects/pack 下
自己执行“git gc”命令后就可以看到了。