本页面介绍了如何排查和修复与 repo sync
命令相关的问题。
修复网络问题
本节提供了一些关于修复可能导致同步失败的网络问题的建议。
使用身份验证以避免配额限制
为了保护服务器免受过度使用,用于访问源代码的每个 IP 地址都与一个配额相关联。
当与其他用户共享 IP 地址时(例如,当从 NAT 防火墙之外访问源代码库时),配额可能会因正常模式而触发。例如,当多个用户在短时间内从同一 IP 地址同步新客户端时,可能会触发配额。
为了避免触发配额,您可以使用身份验证访问,它为每个用户使用单独的配额,而与 IP 地址无关。
要启用身份验证访问
使用密码生成器创建密码。
运行以下命令以转换您的客户端以使用自动身份验证(无需更改分支)
$ repo init -u https://android.googlesource.com/a/platform/manifest
请注意,
/a/
目录前缀会触发自动身份验证。
配置代理使用
如果您要从代理后面下载源代码(这在某些企业环境中很常见),请确保通过运行以下命令显式指定要供 Repo 使用的代理
$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
调整 TCP/IP 设置以避免连接问题
虽然这种情况很少见,但 Linux 客户端可能会遇到连接问题,例如在接收对象时卡在下载过程中。为了改进此问题,请调整 TCP/IP 堆栈的设置或使用非并行连接。您必须具有 root 访问权限才能修改 TCP 设置。要修改设置,请发出以下命令
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
使用本地镜像以避免网络延迟
当使用多个客户端时,您可以创建整个服务器内容的本地镜像,并从该镜像同步客户端,而无需访问网络。按照这些说明在 ~/aosp-mirror/
中创建本地镜像,并针对该镜像同步客户端
创建和同步镜像
$ mkdir -p /usr/local/aosp/mirror $ cd /usr/local/aosp/mirror $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
这些命令在
/user/local/aosp/mirror
中创建一个本地镜像,并使用带有repo init
命令的--mirror
标志初始化镜像。要从镜像同步客户端
$ mkdir -p /usr/local/aosp/main $ cd /usr/local/aosp/main $ repo init -u /usr/local/aosp/mirror/platform/manifest.git $ repo sync
最后,按照以下命令将镜像与服务器同步,并将客户端与镜像同步
$ cd /usr/local/aosp/mirror</code> $ repo sync $ cd /usr/local/aosp/main $ repo sync
可以将镜像存储在 LAN 服务器上,并通过 NFS、SSH 或 Git 访问它。也可以将其存储在可移动驱动器上,并在用户或机器之间传递该驱动器。
使用部分克隆
如果您使用的是 Git 2.19 或更高版本,请在执行 repo init
时指定 --partial-clone
,以克服任何低延迟网络问题
$ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M
此命令不会初始化 Repo 来下载所有内容,而是根据需要下载 Git 对象。
修复特定同步问题
本页面详细介绍了您在尝试同步 Android 源代码时可能遇到的一些已知问题。
命令失败并显示 403 或 500 错误(代理问题)
repo init
或 repo sync
命令可能会失败,并显示 403 或 500 错误。这些错误通常与 HTTP 代理难以处理大型数据传输有关。
虽然没有针对这些错误的特定修复方法,但使用最新的 Python 版本并显式使用 repo sync -j1
有时可能会有所帮助。