我怎么知道git推送完成的百分比是多少?
我正在把一个大约200MB的代码推到回购协议中。这需要很多时间。我们是否可以显示进度条,这样我就可以知道有多少代码被推送到回购协议中?它不是进度“条”,但是当从终端运行时,我怎么知道git推送完成的百分比是多少?,git,github,git-push,Git,Github,Git Push,我正在把一个大约200MB的代码推到回购协议中。这需要很多时间。我们是否可以显示进度条,这样我就可以知道有多少代码被推送到回购协议中?它不是进度“条”,但是当从终端运行时,git push已经默认报告了进度。从: 除非指定了-q,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。即使标准错误流未定向到终端,此标志也会强制执行进度状态 您试图一次推送200 MB的事实表明,您可能在用git做一些次优的事情。git推送——git 2.10(2016年第三季度)的进度将更加精确 见
git push
已经默认报告了进度。从:
除非指定了-q
,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。即使标准错误流未定向到终端,此标志也会强制执行进度状态
您试图一次推送200 MB的事实表明,您可能在用git做一些次优的事情。git推送——git 2.10(2016年第三季度)的进度将更加精确
见杰夫·金(佩夫)
索引包
命令有两个进度表:
- 一个用于“接收对象”,以及
- 一个用于“解析三角洲”
默认情况下,使用“-v
”既不获取也不获取
但对于推送式接收包,我们只需要“解析增量”
”阶段,而不是“接收对象”
”过程。
原因有两个:
- 一个原因很简单,现有客户机已经在同时打印“写入对象”进度。
可以说,从远端“接收”更有用,因为它告诉您实际得到了什么,而不是什么可能卡在客户端和服务器之间的某个缓冲区中。但这需要一个协议扩展来告诉客户不要打印他们的进度。可能,但是
复杂而无收获
- 第二个原因更重要。
在像git over ssh这样的全双工连接中,我们可以在
该包正在传入,它将立即到达客户端。
但是对于半双工连接(如git over http),在收到完整请求之前,我们不应该说任何话。
我们编写的任何内容都可能被Web服务器卡在缓冲区中。更糟糕的是,如果缓冲区被填满,我们可能会陷入死锁
因此,我们最好的办法是避免写任何不符合标准的东西
小的固定尺寸,直到我们收到完整的包装
2016年9月更新:Git 2.10已经存在,您可以在GitHub博客文章“”中看到此进度表的示例:
更新Git 2.11(2016年第4季度)
现在,一个试图推送过多字节的传入“git push
”现在可以
通过在接收端设置新的配置变量来拒绝
结束
参见(2016年8月24日)作者
参见(2016年8月24日)作者。
(于2016年9月9日合并)
接收包
:允许指定最大输入大小
Receive pack将其输入馈送到index pack或unpack对象,这些对象将乐于接受发送方愿意提供的字节数。
让我们允许一个任意的截止点,在这里我们将停止向磁盘写入字节
现在包括:
receive.maxInputSize
如果传入包流的大小大于此限制,则git receive pack将出错,而不是接受包文件。
如果未设置或设置为0,则大小不受限制
使用Git 2.22,可以更好地管理进度:
参见(2019年4月12日)和(2019年4月5日)作者。
(于2019年4月25日合并)
参见。
(于2019年5月30日合并)
进度
:打断过长的进度条行
最近增加的一些进度指标标题很长,
如果翻译成某些语言,时间可能更长
它们在更大的存储库上运行时显示,然后
进度条的长度超过默认的80列终端宽度
当进度条超过终端的宽度时,它会
线缠绕,之后,末端的CR不会返回到
进度条的开头,但到最后一列的第一列
行。
因此,前面显示的进度的第一行
条不会被下一条覆盖,我们最终会得到一堆
滚动过去的截断进度条行:
$ LANG=es_ES.UTF-8 git commit-graph write
Encontrando commits para commit graph entre los objetos empaquetados: 2% (1599
Encontrando commits para commit graph entre los objetos empaquetados: 3% (1975
Encontrando commits para commit graph entre los objetos empaquetados: 4% (2633
Encontrando commits para commit graph entre los objetos empaquetados: 5% (3292
[...]
通过在标题后断开进度条来防止出现这种情况
超出终端的宽度,因此计数器和可选
百分比和吞吐量(即所有更换零件)位于最后
行。
从那时起,后续更新将仅刷新正在更改的
部分,但不是标题,它将如下所示:
$ LANG=es_ES.UTF-8 ~/src/git/git commit-graph write
Encontrando commits para commit graph entre los objetos empaquetados:
100% (6584502/6584502), listo.
Calculando números de generación de commit graph: 100% (824705/824705), listo.
Escribiendo commit graph en 4 pasos: 100% (3298820/3298820), listo.
Git 2.23(2019年第3季度)修复了重基的进度显示:
参见,,(2019年6月24日)和(2019年6月27日)作者。
(于2019年7月9日合并)
rebase
:用“-x
”修复混乱的进度显示
在交互式rebase会话期间使用“exec
”指令运行命令时,或者对于使用“git rebase-x
”的一系列提交,当命令名足够短时,输出可能会有点混乱:
$ git rebase -x true HEAD~5
Executing: true
Executing: true
Executing: true
Executing: true
Executing: true)
Successfully rebased and updated refs/heads/master.
注意最后一行末尾的“)
”。
随着提交范围的增加,它会变得更加混乱:
$ git rebase -x true HEAD~50
Executing: true)
[ repeated 3 more times ]
Executing: true0)
[ repeated 44 more times ]
Executing: true00)
Successfully rebased and updated refs/heads/master.
这些额外的数字和“)
”是先前显示的“重定基址(N/M)
”进度行的残余,这些进度行通常被“执行:
”行完全覆盖,除非“cmd
”短而“N/M
”部分长
确保使用上一个修补程序中添加的术语清除行()
帮助函数清除先前显示的“重定基址(N/M)
”行。
仅当不是“--verbose
”时才这样做,因为在这种情况下,这些“重定基址(N/M)
”行不是作为进度打印的(即,作为结尾带有“\r
”的行),而是作为“常规”输出打印的(带有“\N
$ git rebase -x true HEAD~50
Executing: true)
[ repeated 3 more times ]
Executing: true0)
[ repeated 44 more times ]
Executing: true00)
Successfully rebased and updated refs/heads/master.
Collecting referenced commits: 123
Expanding reachable commits in commit graph: 344786, done.
Computing commit changed paths Bloom filters: 100% (344786/344786), done.
Collecting referenced commits: 154, done.