CentOS 7 升级 Git:从 1.8.3.1 升级到 2.31.6
CentOS 7 升级 Git:从 1.8.3.1 升级到 2.31.6
在使用GitLab Runner执行 CI 任务时,出现了如下错误:
Running with gitlab-runner 18.9.0 Using Shell executor... Fetching changes with git depth set to 20... Reinitialized existing Git repository fatal: git fetch-pack: expected shallow list fatal: The remote end hung up unexpectedly ERROR: Job failed: exit status 1该错误通常出现在Git 版本过旧 + shallow fetch(浅克隆)的情况下。
检查服务器环境:
cat/etc/os-releasegit--versionuname-a输出如下:
CentOS Linux 7 (Core) git version 1.8.3.1 Linux 3.10.0-1160...CentOS 7 官方仓库中的 Git 版本是1.8.3.1,发布时间是2014 年,已经非常陈旧。
GitLab Runner、GitHub Actions 等现代 CI 系统普遍需要Git 2.x才能稳定运行。
因此需要升级 Git。
一、为什么不直接用 yum 升级
CentOS 7 官方仓库提供的 Git 版本仍然是:
git 1.8.3.1即使执行:
yum updategit也不会升级到新版本。
因此有三种方式:
| 方法 | 推荐程度 |
|---|---|
| IUS 仓库 | 中 |
| SCL 软件集合 | 一般 |
| 源码编译安装 | 推荐 |
本文使用源码编译安装,原因:
- 不污染系统仓库
- 可以选择稳定版本
- 不影响系统自带
/usr/bin/git - 方便回退
二、安装编译依赖
首先安装 Git 编译所需的依赖:
yuminstall-y\curl-devel\expat-devel\gettext-devel\openssl-devel\zlib-devel\perl-ExtUtils-MakeMaker\gcc\make\wget\tar如果系统没有编译工具链,可以安装开发工具组:
yum groupinstall-y"Development Tools"三、下载 Git 源码
在/usr/local/src目录下载源码:
cd/usr/local/srcwgethttps://www.kernel.org/pub/software/scm/git/git-2.31.6.tar.gztar-xzfgit-2.31.6.tar.gzcdgit-2.31.6说明:
- Git 最新版本虽然更高,但部分新版本在CentOS 7 的 glibc 环境下编译会出现
sys/random.h等问题。 - 2.31.x 是一个兼容性较好的版本。
- 如果wget下载不下来,可以现在能翻墙的机器上下载了之后再传递到服务器上面
四、编译并安装 Git
按照 Git 官方推荐流程:
cdgit-2.31.6makeprefix=/usr/local/git allmakeprefix=/usr/local/gitinstall安装完成后,Git 将位于:
/usr/local/git/bin/git五、配置系统 PATH
为了让系统优先使用新版本 Git,需要修改 PATH。
创建 profile 文件:
cat>/etc/profile.d/git.sh<<'EOF' export PATH=/usr/local/git/bin:$PATH EOFchmod+x /etc/profile.d/git.shsource/etc/profile.d/git.shgit--versionwhichgit重新加载环境变量:
source/etc/profile.d/git.sh验证 Git 版本:
git--versionwhichgit示例输出:
git version 2.31.6 /usr/local/git/bin/git总结
CentOS 7 默认 Git 版本1.8.3.1已经过于陈旧,在现代 CI/CD 环境中容易出现兼容问题。
升级步骤:
- 安装编译依赖
- 下载 Git 源码
configure + make- 修改 PATH
- 验证 GitLab Runner 环境
最终升级结果:
git version 1.8.3.1 → git version 2.31.6CI 拉取代码问题也随之解决。
