在CentOS系统上搭建Git服务器是企业开发环境中常见的需求,本文将详细介绍完整的安装与配置过程,涵盖环境准备、服务安装、仓库创建、权限管理及安全优化等关键步骤,帮助读者快速构建稳定可靠的Git代码托管服务。

环境准备与系统更新
在开始安装前,建议确保系统处于最新状态,以减少潜在的兼容性问题,执行以下命令更新系统软件包:
sudo yum update -y sudo yum install -y curl policycoreutils-python openssh-server
安装完成后,启动并设置SSH服务开机自启:
sudo systemctl start sshd sudo systemctl enable sshd
防火墙配置是必要环节,需开放SSH(22端口)和Git(默认9418端口)服务:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-port=9418/tcp sudo firewall-cmd --reload
安装Git软件
CentOS官方仓库中通常包含Git,但版本可能较旧,建议先添加EPEL仓库以获取更新版本:
sudo yum install -y epel-release sudo yum install -y git
验证安装是否成功:
git --version
若显示类似git version 2.x.x的输出,则表示安装完成,对于需要特定版本的场景,可从源码编译安装,但需提前安装编译依赖:
sudo yum install -y gcc gettext-devel openssl-devel perl-ExtUtils-MakeMaker xmlto
创建Git专用用户
出于安全考虑,建议创建独立的系统用户用于管理Git服务:

sudo useradd -m -s /bin/bash git sudo passwd git # 设置用户密码
切换至git用户开始后续操作:
su - git
初始化裸仓库
裸仓库(Bare Repository)是Git服务器的标准存储形式,它只包含版本历史信息,而没有工作目录,在用户家目录下创建项目仓库:
mkdir -p ~/repos/myproject.git cd ~/repos/myproject.git git init --bare
--bare参数确保仓库不包含工作文件,适合作为中央仓库使用,设置仓库所有者为git用户:
sudo chown -R git:git ~/repos/myproject.git
配置SSH免密访问
为开发团队配置SSH密钥是实现免密访问的关键,在开发人员本地机器上生成SSH密钥:
ssh-keygen -t rsa -b 4096 -C "user@example.com"
将公钥(~/.ssh/id_rsa.pub)添加到Git服务器的~/.ssh/authorized_keys文件中:
mkdir -p ~/.ssh chmod 700 ~/.ssh cat /path/to/public_key >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
为增强安全性,可禁用git用户的密码登录,仅允许密钥认证:
编辑/etc/ssh/sshd_config,确保以下配置生效:
PasswordAuthentication no
PubkeyAuthentication yes
重启SSH服务:

sudo systemctl restart sshd
设置Git钩子
Git钩子可实现自动化流程,如代码提交前的检查、部署通知等,以pre-receive钩子为例,在仓库的hooks/目录下创建:
vim ~/repos/myproject.git/hooks/pre-receive
```实现简单的分支权限控制:
```bash
#!/bin/sh
while read oldrev newrev refname; do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "$branch" != "main" ]; then
echo "Error: Only pushes to main branch are allowed"
exit 1
fi
done
赋予执行权限:
chmod +x ~/repos/myproject.git/hooks/pre-receive
使用Gitosis或Gitolite管理权限
当团队规模扩大时,推荐使用Gitosis或Gitolite进行集中化的权限管理,以Gitolite为例:
- 在服务器上安装Gitolite:
git clone https://github.com/sitaramc/gitolite git clone git://github.com/sitaramc/gitolite.git mkdir -p ~/bin gitolite/install -to ~/bin
- 使用管理员的公钥初始化:
gl-admin setup admin.pub
- 编辑
~/.gitolite/conf/gitolite.conf定义仓库和用户权限:repo myproject RW+ = user1 user2 R = developer
安全优化建议
- 定期更新:保持Git和系统组件的最新版本,及时修复安全漏洞。
- 访问限制:通过防火墙或TCP Wrappers限制对Git服务器的访问IP。
- 日志监控:启用Git的详细日志记录:
git config --global core.logallrefupdates true
- 备份策略:定期备份裸仓库,可通过
rsync或git bundle实现。
相关问答FAQs
Q1: 如何在CentOS上升级到最新版本的Git?
A1: 当官方仓库版本过旧时,可从GitHub源码编译安装,首先安装依赖包yum groupinstall "Development Tools",然后下载最新源码(如git-2.40.0.tar.gz),解压后依次执行make configure、./configure --prefix=/usr/local、make && sudo make install,最后可通过update-alternatives --config git管理多版本Git。
Q2: Git服务器出现"Permission denied (publickey)"错误如何排查?
A2: 首先检查服务端~/.ssh/authorized_keys文件权限是否为600,所有者是否为git用户,然后使用ssh -vT git@server_ip命令查看详细连接日志,重点关注Offering public key部分,确认客户端公钥是否正确添加,另外检查服务端SSH配置是否禁用了密码登录,以及客户端是否指定了正确的私钥文件(通过ssh -i /path/to/private_key)。