使用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

我试图使用GitPython访问耗时的Git操作的进度。我尝试了从官方文档中获取的示例解决方案,还尝试了在下面更新方法的精确签名之后传入一个方法。每次我调用
fetch()
push()
pull()
参数
progress=of
RemoteProgress
以及
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代码中所做的任何事情都无法解决它。