首页 > 解决方案 > Git fetch - 大量对象,下载缓慢

问题描述

当我运行git fetch production从托管在 Gitlab 上的远程存储库中获取对象时,我在终端中得到以下信息 -

remote: Counting objects: 100% (4895/4895), done.
remote: Compressing objects: 100% (515/515), done.
Receiving objects:  25% (11199/44589), 476.81 MiB | 3.42 MiB/s   

这似乎需要很长时间,因为每个对象似乎都很大。

有趣的是——我完全不知道这些物体是什么;因为我已经仔细检查了我的本地存储库;我所拥有的只是 Laravel 框架,以及我的自定义代码;并且没有大包裹。我估计我的存储库的最大大小不应大于 200 - 300 MB。

有没有办法解决这个问题?快把我逼疯了!

更新:当我撰写这个问题时,终端抛出了以下内容 -

Receiving objects: 100% (44589/44589), 1.14 GiB | 3.39 MiB/s, done.
Resolving deltas: 100% (28324/28324), done.

对象的大小似乎从 44589 -> 28324 下降。有人可以帮我弄清楚发生了什么,我怎样才能加快我的 git pull 和 git fetches?

标签: gitgitlab

解决方案


首先,您可以快速列出存储库中的大型对象

其次,您可以继续并删除存储库历史记录中的一些对象(这意味着您当前签出的工作树可能很小,但大对象可能已提交,然后删除,并且在克隆时仍然可以感觉到它们的存在存储库)
您需要使用git filter-repo.


在服务器端:

请参阅GitLab 14.5(2021 年 11 月)

Git 获取资源优化

Git 获取资源优化

我们改进了Workhorse 和 Gitaly 之间的流量性能,导致git fetch现在使用更少的 GitLab 服务器资源。

如果在 Workhorse 和 Gitaly 之间部署了 gRPC 代理,则此更改可能会导致自我管理 GitLab 出现问题。

如果您在 Workhorse 和 Gitaly 之间部署了 gRPC 代理,Workhorse 将无法再连接。作为一种解决方法,禁用临时workhorse_use_sidechannel功能标志
如果您需要 Workhorse 和 Gitaly 之间的代理,请使用 TCP 代理。

请参阅文档问题


推荐阅读