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

Ser*_*Ala 50 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.
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ale*_*uil 64

简短的回答

这仅仅是通过git命令的输出git count-objects -v用于推(相同的命令被调用时输出gc,pullclone).手册页中的更多信息: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)
...
Run Code Online (Sandbox Code Playgroud)

答案很长

Counting objects: 22, done.
Run Code Online (Sandbox Code Playgroud)

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

Compressing objects: 100% (14/14), done.
Run Code Online (Sandbox Code Playgroud)

这是git在发送之前压缩对象.的14/14处于压缩的KIB(14 KIB压缩)的进展.

Writing objects: 100% (14/14), 1.89 KiB | 0 bytes/s, done.
Run Code Online (Sandbox Code Playgroud)

这是git发送(如果是远程)和写入对象.在1.89昆明植物研究所| 0字节/秒是KiB和速度的进展(完成后为0字节/秒).

Total 14 (delta 10), reused 0 (delta 0)
Run Code Online (Sandbox Code Playgroud)

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


Aka*_*wal 14

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通过网络发送(或写入)对象,您可以看到进度和速度统计信息.

希望这可以帮助.