首页 > 解决方案 > 使用 GitPython 读取 Git 操作的进度卡住了

问题描述

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

# 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())

有关如何进一步调查此问题的任何建议?我已经调试了一天,感觉我错过了一些东西。

标签: pythongitpython-3.7gitpython

解决方案


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

在过去的几个月里,对 Git 进行了本地化更改。将我的 Git 从降级2.21.02.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


推荐阅读