- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
阅读 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/
这个问题已经有答案了: What is x after "x = x++"? (18 个回答) 已关闭 6 年前。 public static void main(String[] args)
我目前正在使用 jquery 循环插件。我有 3 个不同的幻灯片,它们彼此相邻并同时循环播放。我想做的是先关闭第一张幻灯片,然后是第二张幻灯片,然后是第三张幻灯片。无论如何,我可以通过增量或超时来做到
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: ++someVariable Vs. someVariable++ in Javascript 我知道您可以
我一直在查看 SVN 手册,但无法找到“svn log”和“svn st”的“--incremental”选项的简单用法示例或解释。 我正在编写一个开源 SVN GUI 前端,因此我需要一些有关此标志
我有这种矩阵。 非常抱歉,我没有可重现的示例。 表 1: [,1][,2][,3][,4][,5][,6][,7][,8][,9][,10] [1,] 3 NA NA NA
我在hdfs中有一个 Parquet 文件作为我的数据的初始加载。接下来的所有拼花地板只是这些数据集每天都会更改为初始负载(按时间顺序)。这是我的三角洲。 我想读取全部或部分 Parquet 文件,以
我目前有这样的功能,可以将任何输入数字四舍五入到最接近的模糊整数值: $(function(){ $('#my_value').blur(function() { $(this).va
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
我对 SQL 还很陌生,我想知道我是否可以使用它来自动解决我数据库中的一个复杂问题。 也就是说,我每天都在跟踪条目。因此,我们关注的列是: YYYY MM DD XXX YYYY 是年,MM 是月,D
我正在开发一个非常简单的数据库,但我不知道数据透视表是否是一个很好的解决方案。如果我使用数据透视表,我需要添加无用的表只是为了增量。 让我们从头开始。 在用户注册期间,会创建一个新表 GROUP。在G
在 MySQL 中你可以做这样的事情 SELECT @n := @n + 1 n, first_name, last_name FROM table1, (SELECT
如果我正在使用一个类,我知道如何重载运算符 += class temp { public: int i; temp(){ i = 10; } int operator+=(in
我有两个文件:file1、file2。我想从 file2 中获取 file1 中不存在的行。 我读过 post这告诉我使用 grep 的 -v 标志来执行此操作(我阅读了 grep 的手册页,但仍然不
我看了很多类似的题,功能很简单,用于API的嵌套for循环,每分钟可以调用5次。所以我将一年数据的范围设置为 75。你们能帮我解决这个问题吗?提前致谢! 第一部分正在运行,输入列表中的邮政编码。 fo
所以我想计算每日返回/增量的一些时间序列数据,其中每日增量 = value_at_time(T)/value_at_time(T-1) import pandas as pd df=pd.DataFr
请帮我解决这个问题。该表达式之后的步骤是: //Expression offSpring1[m1++] = temp1; //Steps: 1.- increment m1 2.- assign te
我正在开发一个解决方案,在该解决方案中,我通过 webapp 不同类型的实体(例如中央数据库上的用户、组、部门信息)和 ldap 进行身份验证。但是最终用户将与来自远程位置(他的办公室、节点)的数据交
我有以下 Python 数据结构: data1 = [{'name': u'String 1'}, {'name': u'String 2'}] data2 = [{'name': u'String
如果 AtomicInteger 会发生什么?达到 Integer.MAX_VALUE 并递增? 值会回到零吗? 最佳答案 由于integer overflow,它会环绕, 到 Integer.MIN
我是 C 的初学者,我正在尝试在 While 循环中进行 0.00001 增量。例如,double t = 0.00001 并且我希望循环每次以 0.00001 的增量运行,第二次是 0.00002
我是一名优秀的程序员,十分优秀!