重新编译 Git,解决 Android 源码下载网络异常
发布日期:
用 repo 下载 Android 源码时,网络稍有波动就会出现连接错误,中断后重新下载不会断点续传,而是从头开始下载当前数据块,导致本该 80G 左右的源码越下越大,始终无法完成。
根本原因是 Debian/Ubuntu 默认打包的 Git 使用 GnuTLS 作为 TLS 后端,而 GnuTLS 在某些网络环境下兼容性较差。解决方案是自行编译一个使用 OpenSSL 的 Git 版本。
本文的做法会将新 Git 安装到
/opt/git,与系统自带的 Git 共存,不需要卸载系统 Git。
环境说明
| 项目 | 版本 |
|---|---|
| 系统 | Debian 11(同样适用于 Ubuntu 等 deb 系发行版) |
| Git | 2.37.1 |
编译安装
1. 准备工作目录
mkdir ~/git-rectify
cd ~/git-rectify
2. 下载并解压 Git 源码
wget https://www.kernel.org/pub/software/scm/git/git-2.37.1.tar.gz
tar xf git-2.37.1.tar.gz
cd git-2.37.1
3. 安装编译依赖
sudo apt install libcurl4-openssl-dev
4. 配置编译选项
指定安装路径为 /opt/git,并启用 OpenSSL:
make configure
./configure --prefix=/opt/git --with-openssl
5. 编译并安装
make
sudo make install
编译产物会安装到 /opt/git 目录。
6. 配置环境变量
编辑 ~/.bashrc,将新 Git 加入 PATH:
export PATH="/opt/git/bin:$PATH"
注意要放在原有 $PATH 之前,这样终端会优先找到新编译的 Git,执行 git --version 可以验证是否生效。
附:Android 源码下载命令
# 初始化(需要提前安装 repo)
repo init -u https://android.googlesource.com/platform/manifest \
-b android-10.0.0_r17 \
--partial-clone \
--clone-filter=blob:limit=10M
# 同步源码
repo sync -j8 -c
android-10.0.0_r17 分支完整源码约 80G 左右,使用 --partial-clone 可以显著减少初次同步的数据量。