使用 GitPython 卡住的 Git 操作的读取进度

Reading progress of Git operation using GitPython stuck

我正在尝试使用 GitPython 访问耗时 Git 操作的进度。我尝试了从官方文档中获取的示例解决方案,还尝试按照下面更新方法的确切签名传递一个方法。每次我调用 fetch()push()pull() 参数 progress=<anything> 时,程序卡住并且 update方法不会被调用。如果我在不设置 progress 参数的情况下调用这些操作,它会完美运行。

# Not stuck anymore, yet no progress
pp = ProgressPrinter()
fetch_info = origin.fetch(progress=pp)

我的实现核心:

from git import RemoteProgress

class ProgressPrinter(RemoteProgress):
    def update(self,
               op_code,
               cur_count,
               max_count=None,
               message=''):
        print("Is this even called?")

之后:

origin = repo.remotes.origin
assert origin.exists()
fetch_info = origin.fetch(progress=ProgressPrinter())

关于如何进一步调查此问题的任何建议?我已经调试了一天了,感觉好像遗漏了什么。

1. GitPython 在处理进度信息时卡住

在过去的几个月里,Git 进行了本地化更改。将我的 Git 从 2.21.0 降级到 2.20.4 暂时解决了这个问题。这不是一个优雅的解决方案,但 GitPython 的开发人员知道这些变化。

看一下问题是否解决:(Github Issue #871)

2。 RemoteProgressupdate() 方法未被调用

如果您的 Git 进程很快完成,则根本不会调用此方法。为了模拟更长的过程,我建议您从 Github / Gitlab 克隆一个大型存储库并按以下方式准备它:

$ git reset --hard @~100
$ git remote remove origin
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git remote add origin <url>

我建议以某种方式更改 update() 方法,当操作以 = [up to date] 终止时,它也被称为 一次PullRequest