【问题标题】:repo sync stuck at 99% because of frequent internet disconnections由于频繁断网,回购同步卡在 99%
【发布时间】:2017-11-20 22:04:03
【问题描述】:

我尝试重新同步 cyanogenmod 源。一直到99%这个阶段,但是这个阶段好像有一个大文件,而且因为我经常断网,下载不了。

每次断开连接时,都会打印一个fatal: early EOFrepo sync 会停止,并且似乎在下一次运行时,它会从头开始这个文件,尽管之前保存了一个临时对象。

有没有办法告诉repo sync 从它在特定文件中停止的点开始下一次运行,而不是从头开始?

我尝试在一夜之间无限循环运行 repo 同步,但下载并没有结束,而是我的内存已满。

临时文件位于文件夹~/android/system/.repo/project-objects/CyanogenMod/android_frameworks_base.git/objects/pack 下,格式为:

 78M    tmp_pack_7JhRgA
 106M   tmp_pack_fprjIZ
 523M   tmp_pack_tydAd5
 436M   tmp_pack_po9dEw
 780M   tmp_pack_rewDSS

我还尝试在每次新的 repo 同步之前删除这些临时文件以避免内存满,但它仍然无助于结束下载。顺便说一句,删除它们似乎不会使下一次运行从不同的点开始,因此它证实了它在下一次运行中忽略它们的怀疑。

我运行的确切 repo 同步命令是 repo sync -j4 -f -c

repo init 命令是: repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0

断网后打印的错误是:

Fetching projects:  94% (497/528)  Fetching project   CyanogenMod/android_frameworks_opt_vcard
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   
Fetching projects:  96% (507/528)  Fetching project    CyanogenMod/android_hardware_qcom_audio00 KiB/s   
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   616668), 4.93 MiB | 131.00 KiB/s   
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   616668), 5.12 MiB | 123.00 KiB/s   
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   
Fetching projects:  99% (523/528)  Fetching project CyanogenMod/android_hardware_qcom_audio
Fetching project CyanogenMod/android_hardware_qcom_audio00 KiB/s   
error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

【问题讨论】:

  • 您可能应该在 Git 邮件列表 git@vger.kernel.org 上就此事联系。 IIRC 最近在 git fetch 中讨论了关于支持简历的讨论,我怀疑这是您的 repo sync 所依赖的,但我不记得那个讨论的结论是什么。

标签: android git vmware cyanogenmod repo


【解决方案1】:

我刚才尝试了以下命令,但同步失败了。我得到了所有的项目

repo init -u https://github.com/CyanogenMod/android.git -b cm-13.0`
repo sync -j8 -q -c --no-tags`

repo 同步的 -c/--current-branch 选项使 repo 仅获取您真正需要的分支,而不是每个 git 的所有分支。

--no-tags 避免同步所有标签

使用 -c 和 --no-tags 可以减少下载量,因此同步速度更快。

如果你想让它更快,你可以试试--depth=<n>,但这会删除 git 历史记录。

在断开互联网连接后,repo 有效地从中断的地方开始。它确实从头开始处理项目列表,可能会为已经处理的项目获取一些新数据。

但它在之前同步的项目中移动得相当快,因为​​它之前获取的所有数据都在 .repo 目录中。

我希望确保您不会在每次断开连接后都执行repo init

【讨论】:

  • 嘿,我不明白这对我的情况有何帮助。我的问题是经常断网。这些标志中的哪一个可以帮助实现这一点?
【解决方案2】:

最后,问题似乎得到了增强,因为使用了用于运行 Ubuntu 机器的 VMWare。不知何故,VMWare 导致 Internet 接口频繁断开连接,当我尝试使用 VirtualBox 时,虽然偶尔会出现 fatal: early EOF,但最终 Internet 接口足够稳定以完成同步。

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 2010-10-12
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多