我正在阅读git basics
Git认为其数据更像是一组缩影的快照 文件系统
我无法理解git快照的含义。 git是否存储每个快照/版本中的整个文件内容?例如, 版本1
#include <stdio.h>
int main()
{
printf("hello, world");
return 0;
}
在版本2中,我在文件中添加了一行。
#include <stdio.h>
int main()
{
printf("hello, world");
printf("hello, git");
return 0;
}
git会存储整个内容,而不是仅存储这两个版本之间的差异(printf("hello, git")
)作为svn等吗?
如果是,那有什么意义呢?
答案 0 :(得分:1)
将 git存储整个内容,而不是仅将这两个版本之间的差异(printf(“hello,git”))存储为svn等?
Git存储文件的全部内容。但是当文件没有改变时,它不需要额外的空间。
阅读关于Git包文件格式的精彩答案:Are Git's pack files deltas rather than snapshots?
文件(和其他内容)以“blob”的形式存储。每个字节序列都有自己的sha1代码,这对它来说非常独特。
关于SHA1的情况如下:
您可能已经注意到git确实显示了文本文件的差异,指出了添加和删除的行。为方便起见,这是使用diff utility完成的。这也有助于收集贡献统计数据。这用于解决合并冲突。但是,Git将文本(和二进制)文件视为单个blob并将其存储。
有一种方法可以强制Git在暂存更改时将文本文件分解为块。这对于非常大的文件可能很有用,但对于小文件却没用。
git add --patch
在索引和工作树之间以交互方式选择补丁,并将它们添加到索引中。这使用户有机会在将修改后的内容添加到索引之前查看差异。
答案 1 :(得分:1)
git会存储整个内容而不仅仅存储差异吗? [......如果是的话]重点是什么?
是。这就是使构建好的git历史变得如此简单的原因,而且反直觉也会使压缩效率更高。
(编辑:放弃许多迂腐和详细阐述修订历史)