使用gitpythonstu读取Git操作的进度

2024-05-23 13:52:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用GitPython访问耗时的Git操作的进度。我尝试了从官方文档中获取的示例解决方案,还尝试在下面的update方法的确切签名之后传入一个方法。每次我用参数progress=<anything>调用fetch()push()pull()时,程序就被卡住了,update方法不会被调用。{cd6>如果没有设置的话,{cd6>可以正常工作。在

  • 我使用asserts来确保我的repo对象是可用的并且处于预期状态
  • ProgressPrinter()不产生None
  • 我尝试从主线程和多线程调用函数
  • 我查看了RemoteProgressimplementation (line 350),以及{}的{a2},但没有看到原因,为什么它不会继续执行

  • 我发现,当我分配我的ProgressPrinter实例并传递分配的变量时,程序不再卡住。但是update()方法不会被调用,也不会打印任何进度

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

我的实施核心:

^{pr2}$

后来:

^{3}$

关于如何进一步调查这个问题有什么建议吗?我已经调试了一天了,感觉好像我遗漏了什么。在


Tags: 方法文档git程序示例官方updatefetch
1条回答
网友
1楼 · 发布于 2024-05-23 13:52:39

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终止时,它也被称为一次

相关问题 更多 >