使用GitPython读取Git操作的进度
我试图使用GitPython访问耗时的Git操作的进度。我尝试了从官方文档中获取的示例解决方案,还尝试了在下面更新方法的精确签名之后传入一个方法。每次我调用使用GitPython读取Git操作的进度,python,git,python-3.7,gitpython,Python,Git,Python 3.7,Gitpython,我试图使用GitPython访问耗时的Git操作的进度。我尝试了从官方文档中获取的示例解决方案,还尝试了在下面更新方法的精确签名之后传入一个方法。每次我调用fetch(),push(),pull()参数progress=ofRemoteProgress以及push()的参数时,都没有看到原因,为什么它不会继续执行 我发现,当我分配我的ProgressPrinter实例并传递分配的变量时,程序不再被卡住。但是,update()方法不会被调用,也不会打印任何进度 #不再停滞,但没有进展 pp=Pr
fetch()
,push()
,pull()
参数progress=ofRemoteProgress
以及push()
的参数时,都没有看到原因,为什么它不会继续执行
我发现,当我分配我的ProgressPrinter
实例并传递分配的变量时,程序不再被卡住。但是,update()
方法不会被调用,也不会打印任何进度
#不再停滞,但没有进展
pp=ProgressPrinter()
fetch\u info=origin.fetch(progress=pp)
我的实施的核心:
从git导入RemoteProgress
类ProgressPrinter(RemoteProgress):
def更新(自我,
op_代码,
cur_count,
最大计数=无,
消息=“”):
打印(“这叫什么?”)
后来:
origin=repo.remotes.origin
断言origin.exists()
fetch\u info=origin.fetch(progress=ProgressPrinter())
关于如何进一步调查这个问题有什么建议吗?我已经调试了一天了,感觉好像遗漏了什么 1。GitPython在处理进度信息时遇到问题
在过去的几个月里,Git进行了本地化更改。将我的Git从2.21.0
降级到2.20.4
暂时解决了这个问题。这不是一个优雅的解决方案,但是GitPython的开发人员知道这些变化
看一看这个问题,看看它是否解决了:
2<代码>远程进程
的更新()
方法未被调用
如果Git进程很快完成,那么根本不会调用此方法。为了模拟更长的过程,我建议您从Github/Gitlab克隆一个大型存储库,并按以下方式进行准备:
$git重置--硬@~100
$git远程删除源
$git reflog expire--expire=now--all&&git gc--prune=now--aggressive
$git远程添加源
我建议在某种程度上更改
update()
方法,当操作以=[最新]
终止时,也会调用一次该方法:您验证了您的git版本吗?git--version
是2.21.0您尝试过sys.stdout.flush()
之后打印?可能是缓冲?只是尝试了一下,没有效果。我尝试做类似的事情已经有几年了,我发现Git本身有一个bug,在某些情况下进度文本不会被发送。如果这个bug还没有被修复,那么在Python代码中所做的任何事情都无法解决它。