本页介绍了如何排查和修复与 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
有时可能会有所帮助。