Git repo 同步 - 连接丢失

Posted

技术标签:

【中文标题】Git repo 同步 - 连接丢失【英文标题】:Git repo sync - connection lost 【发布时间】:2015-12-23 07:44:28 【问题描述】:

我正在尝试下载 android 源 (Cyanogenmod)。我花了超过 12 小时下载 2.5GB 文件,现在我的连接丢失了一段时间,它显示

 error: RPC failed; result=56, HTTP code = 200
    fatal: The remote end hung up unexpectedly
    fatal: early EOF
    fatal: index-pack failed
    fatal: unable to access 'https://android.googlesource.com/platform/prebuilts/misc/': Could not resolve host: android.googlesource.com
    fatal: unable to access 'https://github.com/CyanogenMod/android_packages_inputmethods_LatinIME/': Could not resolve host: github.com
    fatal: unable to access 'https://android.googlesource.com/platform/prebuilts/misc/': Could not resolve host: android.googlesource.com
    error: Cannot fetch CyanogenMod/android_packages_inputmethods_LatinIME
    error: Cannot fetch platform/prebuilts/misc
    error: Exited sync due to fetch errors

我可以恢复下载还是从头开始下载,请帮我恢复下载。 谢谢!

【问题讨论】:

【参考方案1】:

应用我在下面描述的修复程序后,您只需重新运行 repo sync 即可恢复并完全完成被这些致命错误中断的资源同步过程。

您遇到的与 DNS 相关的错误 [fatal: Could not resolve host] 的解决方案在 Google 的 AOSP Developer Site 的已知问题解决页面上有详细说明。通过在开发机器的 /etc/hosts 配置文件中为远程存储库 android.googlesource.com 添加适当的主机条目来应用此修复。从clicking here 和here 开始执行免费网络资源提供的IP 地址查找工具:http://network-tools.com/nslook/。

Google 对此问题的完整描述以及详细的解决方案,我已在此处提供:

难以同步源树(DNS 问题)。

症状:运行 repo sync 时,进程失败并出现各种错误 与不识别主机名有关。一个这样的错误是 <urlopen error [Errno -2] Name or service not known>编辑:另一个致命错误可能是 Could not resolve host

原因:一些 DNS 系统难以应对高数字 同步源树所涉及的查询数(可能有几个 最坏情况下的一百个请求)。

修复:手动解析相关主机名,并对这些主机名进行硬编码 本地结果。

您可以使用 nslookup 命令解决它们,该命令将为您提供 每一个都有一个数字 IP 地址(通常在“地址”中 部分输出)。

    $ nslookup googlesource.com
    $ nslookup android.googlesource.com

然后您可以通过编辑 /etc/hosts 在本地硬编码它们,并添加两个 该文件中的行,格式为:

    aaa.bbb.ccc.ddd   googlesource.com
    eee.fff.ggg.hhh   android.googlesource.com

请注意,这只会在 服务器的地址不会改变,如果他们改变了你就无法连接 您必须再次解析这些主机名并编辑 etc/hosts 相应地。

【讨论】:

@Spartan DNS 失败的原因并不是 DNS 设置配置不当。事实上,repo 会迅速生成许多并发的、重复的 DNS 请求。然后,repo 致命失败,因为 DNS 服务器响应被判断为太慢,即没有响应。【参考方案2】:

你don't resume a clone,你可以try a shallow clone instead。

这里提到:

Error code 56 表示 curl 接收错误 CURLE_RECV_ERROR,这意味着在克隆过程中存在阻止数据接收的问题。 这通常是由网络设置、防火墙、*** 客户端 or anti-virus 在传输所有数据之前终止连接引起的。

您可以通过以下方式了解更多信息:

set GIT_TRACE_PACKET=1
set GIT_TRACE=1
set GIT_CURL_VERBOSE=1

你可以试试changing http.postBuffer或者切换到ssh url clone。

【讨论】:

【参考方案3】:

Spartan 我检查了 Cyanogenmod 的工作正常,我更喜欢使用 Internet 下载管理器。我下载 60mp 并调用它。成功获取并恢复。

【讨论】:

【参考方案4】:

无法解析主机:android.googlesource.com

这可能是 DNS 服务器问题。首先尝试restarting your modem 以刷新其 DNS 缓存。如果您仍然遇到问题,请尝试 changing your Primary DNS 访问 Google 运营的这两个公开的 DNS 服务器之一:

8.8.8.8 8.8.4.4

请注意,如果您的主 DNS 已经按照描述进行了配置,并且您还长时间重启了路由器而没有解析(双关语),那么调整您的主 DNS 配置以指向其他公共 DNS 服务器不太可能解决你的情况。但是,有信誉的免费公共服务器列表can be found here。

【讨论】:

以上是关于Git repo 同步 - 连接丢失的主要内容,如果未能解决你的问题,请参考以下文章

sh [Git Repo和Github Sync]放置在git仓库的根目录并从cron运行以安排与远程仓库同步#sync #github #repo

repo/repo init-解决同步源码Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle

同步上游的提交时,如何在 Git 中清理提交历史?

连接并同步windows下的git仓库

git fork同步是什么意思?

git本地仓库连接同步修改远程仓库