gpt4 book ai didi

git - git 何时以及如何使用增量进行存储?

转载 作者:IT王子 更新时间:2023-10-29 00:54:28 25 4
gpt4 key购买 nike

阅读 git 的文档时,他们非常强调的一件事是 git 存储快照而不是增量。因为我在 Git 上看到一门类(class)说 Git 存储文件版本之间的差异,所以我尝试了以下操作:我在一个空文件夹上初始化了一个 git 存储库,创建了一个包含一些 lorem ipsum 文本的文件 lorem.txt文件并提交。

然后在命令行上使用 find .git/objects -type f 我列出了 git 保存在对象文件夹中的内容,并且正如预期的那样找到了一个指向树对象的提交对象,该树对象指向包含的 blob 对象我保存的 lorem ispum 文本。

然后我修改了 lorem ipsum 文本,向其中添加了更多内容,暂存此更改并提交。再次列出文件,我现在可以看到新的提交对象,指向一个新的三对象和一个新的 blob 对象。使用 git cat-file -p 331cf0780688c73be429fa602f9dd99f18b36793 我可以看到新 blob 的内容。它们正是完整 lorem.txt 文件的内容,旧内容加上更改。

这按文档预期的那样工作:git 存储快照,而不是增量。然而,在互联网上搜索我发现 this SO question .在接受的答案中,我们看到以下内容:

While that's true and important on the conceptual level, it is NOT true at the storage level.

Git does use deltas for storage.

Not only that, but it's more efficient in it than any other system. Because it does not keep per-file history, when it wants to do delta-compression, it takes each blob, selects some blobs that are likely to be similar (using heuristics that includes the closest approximation of previous version and some others), tries to generate the deltas and picks the smallest one. This way it can (often, depends on the heuristics) take advantage of other similar files or older versions that are more similar than the previous. The "pack window" parameter allows trading performance for delta compression quality. The default (10) generally gives decent results, but when space is limited or to speed up network transfers, git gc --aggressive uses value 250, which makes it run very slow, but provide extra compression for history data.

这表明 Git 确实使用增量进行存储。据我了解,Git 不会一直使用增量,只有在它检测到有必要时才使用。这是真的吗?

我在文件中放置了很多 lorem 文本,因此它的大小为 2mb。我以为当对一个大文本文件进行小的更改时,Git 会自动使用增量,但正如我所说的那样。

Git 何时使用增量以及它是如何工作的?

最佳答案

Git 只在“包文件”中使用增量。最初,每个 git 对象都被写成一个单独的文件(如您所见)。后来,git 可以将许多对象打包到一个文件中,称为“打包文件”。然后压缩包文件,这会自动利用包文件中文件之间的任何重复(或文件内的重复)。

此包装由 git repack 执行.您可以通过手动调用它来查看它的运行情况。如果您在 git 存储库上运行 git repack -ad,您应该会看到已用磁盘空间和 .git/objects 下的文件数下降,因为文件被组合成包和压缩。

实际上,您通常不需要运行 git repack。默认情况下,Git 会定期运行 git gc,后者会在必要时运行 git repack。所以放轻松,git 会支持你 :-)。

优秀的“git book”也有一个关于 packfiles 的章节,有更多的解释: http://git-scm.com/book/en/v2/Git-Internals-Packfiles .

关于git - git 何时以及如何使用增量进行存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28222703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com