Git fetch / pull / clone在接收对象时挂起

问题描述 投票:40回答:5

当从git存储库中获取或提取或克隆存储库时,我得到了这一点:

remote: Counting objects: 6666, done.
remote: Compressing objects: 100% (5941/5941), done.
Receiving objects:  23% (1534/6460), 11.68 MiB | 23 KiB/s  

它挂了。 23%/对象的数量不是给定的,它的范围从单个数字到最多60s,似乎。下载列表的速度也冻结了 - 它不像它慢慢向零爬行。

我坐在旁边的那个人没有问题,所以这不是路由器问题。我们使用beanstalk作为我们的工作存储库,但是我有来自beanstalk和github的问题(虽然偶尔会看到一个github会完成)。

自从升级到Mountain Lion并更新Xcode以来,这个问题似乎才出现。我已经擦了git(包括XCode的)并尝试用自制软件安装它。这不起作用,所以我删除它并尝试使用他们提供的Mac安装包,但也没有解决问题。

Beanstalk为git存储库提供了SSH URL,但我没有遇到通过SCP或SSH连接到我已完成工作的服务器的问题。

这会杀死我的工作流程,所以任何帮助都将非常感谢!

git ssh scp
5个回答
20
投票

NAT上的VMware对我来说有这个问题。将其更改为Bridged(复制状态)修复了问题。


8
投票

尝试检查您的网络连接。也许路由表中有垃圾。可能是您的路由器上的端口损坏或计算机的网络接口问题。尝试ping你正在克隆git repo的服务器,也许你的计算机和这个服务器之间的链接不稳定。


7
投票

看起来像我的问题。在一段短暂的时间之后,Git似乎仍然在抓取或推动。我可以建议你放入~/.ssh/config

Host *

ServerAliveInterval 60

我还有山狮的MBP。我希望这个超时是导致问题的原因。 (大约三十或四十分钟后,我注意到它继续。)


2
投票

在Mac上,git fetch应该更能抵抗这类问题,使用Git 2.22(2019年第二季度):在使用SIGPIPE(例如OSX)杀死“git fetch”的平台上,在另一端运行的upload-pack挂起在检测到错误后,可能会导致“git fetch”死亡并发出信号,这导致了一个错误的测试。 “git fetch”现在在其操作的网络部分中忽略了SIGPIPE(这不是问题,因为我们从write(2)s检查返回状态)。

参见commit 1435889(2019年3月3日)和commit 37c8001(2019年3月5日)的Jeff King (peff)。 (由Junio C Hamano -- gitster --合并于commit 27cdbdd,2019年3月20日)

fetch:在网络运营期间忽略SIGPIPE

默认的SIGPIPE行为对于生成大量输出的命令很有用:如果输出的接收器消失,我们将异步通知以停止生成它(通常通过终止程序)。

但对于像fetch这样主要关注接收数据并将其写入磁盘的命令,意外的SIGPIPE可能会很尴尬。我们已经检查了所有write()调用的返回值,并且由于信号导致死亡,我们有机会优雅地处理错误。

在Linux上,我们通常不会在获取期间看到SIGPIPE。如果网络连接的另一端挂起,我们将看到ECONNRESET。 但是在OS X上,我们得到了一个SIGPIPE,并且该过程被杀死了。

让我们在fetch的网络部分忽略SIGPIPE,这将导致我们的write()返回EPIPE,从而为我们提供跨平台的一致行为。


-17
投票

首先尝试通过键入来初始化git存储库文件夹

$ git init

它应该有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.