当我做“git push”时,统计数据意味着什么? (总数,三角洲等)

时间:2014-01-31 09:14:31

标签: git git-push

以下是一个例子:

$ git push -u myserver master
Counting objects: 22, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.
Total 14 (delta 10), reused 0 (delta 0)
To myserver.com:git/myrepo.git
   ed46414..0cae272  master -> master
Branch master set up to track remote branch master from myserver.

基本上对我来说唯一有意义的是“使用多达8个线程”的8,因为我有一个四线程处理器,超线程,因此我可以运行8个线程。

有22个?为什么说22和14,其他8发生了什么?为什么它说0字节/秒,因为它做了东西并占用了有限的时间?什么是“总数”和“三角洲”和“重复使用”?

有关示例的详细信息:以上示例是在Mac OS X上从终端进行了复制粘贴。我手动执行了find-replace以替换“myrepo”和“myserver.com”,所有内容别的是逐字的。存储库有910次提交,自上次推送以来我做了大约3次提交。 3个新提交影响了至少3个文件。回购包含了超过一千个文件。

2 个答案:

答案 0 :(得分:61)

简短回答

这仅仅是推送的git命令git count-objects -v的输出(在gcpullclone时调用相同的命令。手册页中的更多信息:git-count-objects(1)

$ git count-objects -v
...
size: 14 # The "Compressing objects: 100% (14/14)" part (the size in KiB)
in-pack: 22 # The "Counting objects: 22" part (the number of objects)
...

答案很长

Counting objects: 22, done.

这是针对该特定提交计算的git 22个内部对象。几乎git中的所有内容都是一个对象,基本上是blob保存在各自哈希下的 .git / objects 文件夹中。手册页中的更多信息:9.2 Git Internals - Git Objects

Compressing objects: 100% (14/14), done.

这是git在发送之前压缩对象。 14/14 是压缩的KiB进展(14 KiB压缩)。

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.

这是git发送(如果是远程)并写入对象。 1.89 KiB | 0字节/秒是KiB和速度的进展(完成后为0字节/秒)。

Total 14 (delta 10), reused 0 (delta 0)

这是git中 packfile 算法的输出(参见9.4 Git Internals - Packfiles)并且相当模糊。它基本上将未使用的对象(通常是较旧的历史记录)打包在 .git / objects / pack 中。打包后,git会检查它是否可以重用包(因此重用0 部分)。 delta 0 部分是来自打包或重复使用的KiB增益。

答案 1 :(得分:13)

Git是一个内容可寻址文件系统。即,它需要一个对象(文件,树,提交)并将其存储在可由哈希处理的文件中。

假设您对文件进行了非常小的更改。 git应该将整个文件存储为不同的对象吗?它确实如此。但偶尔(在推送,拉动期间),git会将文件更改计算为增量并存储它们而不是完整文件。

这意味着,最新版本的文件存储完整(因为它应该最容易获得),同一文件的旧版本只是一个包含两者之间差异的对象,依此类推。

这样git可以节省空间,同时仍然能够为你抛出的任何修订重建文件。

现在回答你的问题:

Counting objects: 22, done.:Git正在计算与您正在推送的提交相关的对象。

Total 14 (delta 10):Git能够通过查找10个增量来减少对象的数量。

reused 0 (delta 0):如果已存在delta对象,Git可以重用它们。例如,如果在某些其他文件中可能引入了类似的更改,则delta可能类似且可重用。在这里,没有什么可以重复使用。

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.这里Git通过网络发送(或写入)对象,你可以看到进度和速度统计数据。

希望这有帮助。