Git pull非常慢...为什么?为什么?

s4chpxco  于 2023-09-29  发布在  Git
关注(0)|答案(9)|浏览(216)

注意我已经研究了git-is-very-very-slow问题,但在他们的情况下,原因是大的二进制文件-而在我的存储库中只有PHP/JS/HTML/CSS代码(没有二进制文件),存储库中最大的文件大约是800 KB。
我修改了一个文件(几行),然后是git add .git commit -m "msg",然后是git push origin master
在另一台机器上,当我执行git pull origin master时,它会下载几个MiB的数据,并且需要2分钟以上的时间来计算增量并应用更改。这里面有很大的问题。
我怀疑最近的一些操作可能会导致这种情况:
最近,我无意中添加了许多供应商资产(bower_components资产),当我意识到这一点时,我已经使用git rm将它们从存储库中删除(当然,git addgit commitgit push到上游)。
那是几天前的事了,我现在的问题就是在那个时候开始出现的。
我有两个问题:

  • 为什么会这样?
  • 如何修复我的存储库?

注意:我是唯一一个使用和推到这个仓库。

xpcnnkqh

xpcnnkqh1#

我也有同样的问题。对我来说,这是一个IPv4/IPv6问题。我修复了它,强制SSH使用IPv4。
在/etc/ssh/ssh_config中设置“AddressFamily inet”以强制IPv4连接。然后重启ssh客户端sudo service ssh restart
更多信息here.

qlzsbp2j

qlzsbp2j2#

当我处理成千上万的小文件时,我也遇到了同样的问题。解决这个问题的方法是在git repo的配置中设置postbuffer

git config http.postBuffer 524288000

而不是以18 KB/s上传它突然去了全带宽

knpiaxh1

knpiaxh13#

我尝试了所有的解决方案在这个线程没有运气。在一位同事的建议下,我尝试使用了Git protocol 2,结果非常有效(从等待3分钟的拉入/推入开始到几秒钟)

git config --global protocol.version 2
h5qlskok

h5qlskok4#

问题出现在EmberJS应用程序目录中。它包含node_modulesbower_components目录,这些目录保存了GruntJS用来构建我的JS和CSS资产的第三方库。
其中每个都包含许多文件和目录。考虑到依赖关系树包含大小从小(几个文件)到大(很多文件)变化的数百个库。
删除这些目录并忽略它们之后,git仓库再次快速工作。

e4eetjau

e4eetjau5#

我也有过类似的经历-- git pull和push突然开始运行得非常慢,在我本地的Mac OSX和Linux / Apache服务器上都需要十分钟或更长时间。我删除了我Mac上的回购的本地副本,并重新克隆它,它开始运行良好。在服务器上做了同样的事情,一切都很好。我想它被某种方式损坏了?

ojsjcaue

ojsjcaue6#

如果有人偶然发现这个线程,在删除.git文件夹之前,尝试重新启动您的WiFi,这可能只是您的WiFi连接问题。

xwbd5t1u

xwbd5t1u7#

不仅协议v2会有帮助,提交图(mentioned here)也会有帮助。
在Git 2.34(Q4 2021)中,通过利用提交图(当可用时)优化了引用提示的加载,以准备“git fetch-pack“(man)中的公共祖先协商。
参见commit 3e5e6c6(2021年8月4日),作者Patrick Steinhardt ( pks-t )
(由Junio C Hamano -- gitster --合并至commit 1b2be06,2021年8月24日)

fetch-pack:通过提交图加速引用加载

签字人:帕特里克·斯坦哈特
在进行引用协商时,git-fetch-pack(1)从磁盘加载所有引用,以确定它与远程仓库有哪些共同的提交。
这在有许多引用的存储库中可能非常昂贵:在一个拥有大约220万个refs的真实仓库中,通过ID获取一个提交需要大约44秒。
占主导地位的加载时间是解压缩和解析提交引用的对象。
在这种情况下,我们只关心提交(或可以剥离为一个的标签),因此,如果我们有一个可用的提交图,通过切换解析逻辑来使用提交图,可以轻松获得性能优势。
像这样,我们避免了访问对象数据库来解析这些提交,而是只从提交图中加载它们。
当在具有220万个引用的存储库中执行git-fetchman)时,这会导致显著的性能提升:

Benchmark #1: HEAD~: git fetch $remote $commit
  Time (mean ± σ):     44.168 s ±  0.341 s    [User: 42.985 s, System: 1.106 s]
  Range (min … max):   43.565 s … 44.577 s    10 runs

Benchmark #2: HEAD: git fetch $remote $commit
  Time (mean ± σ):     19.498 s ±  0.724 s    [User: 18.751 s, System: 0.690 s]
  Range (min … max):   18.629 s … 20.454 s    10 runs

Summary
  'HEAD: git fetch $remote $commit' ran
    2.27 ± 0.09 times faster than 'HEAD~: git fetch $remote $commit'
mbyulnm0

mbyulnm08#

我使用Linux Mint和GitLab和GitHub。我以前在pull/fetch上没有问题,但突然间我只在GitLab上遇到了问题。阅读这个帖子后,我明白了它可能与SSH和IPv4/6有关。
当我在https://whatismyipaddress.com/上看到网站找不到我的IPv6地址时,我重新启动了我的路由器。现在一切都好了。
所以在开始更改设置之前,请尝试以下简单解决方案

nuypyhwy

nuypyhwy9#

这可能是由于您使用的git协议。我把gitlab项目的url切换到了***https***,慢的噩梦消失了!
您可以编辑您的存储库.git/config并更改为https url,或通过命令:

git remote set-url https://{server}@gitlab.com/{user}/{project}.git`

相关问题