在CentOS系统上搭建Git服务器是企业或个人开发者常用的版本控制方案,本文将详细介绍从环境准备到服务配置的全过程,包括安装依赖、初始化仓库、配置SSH访问以及安全设置等关键步骤。

环境准备与基础安装
首先需要一台已安装CentOS 7/8系统的服务器,推荐使用最小化安装后通过yum补充必要组件,执行以下命令更新系统并安装Git及依赖服务:
sudo yum update -y sudo yum install -y git curl openssl openssh-server
安装完成后检查Git版本:
git --version
确保输出类似git version 2.x.x,CentOS 7默认Git版本可能较旧,若需升级可通过EPEL仓库或源码编译。
创建Git专用用户
出于安全考虑,建议创建独立的系统用户管理Git服务:

sudo useradd -m -s /bin/bash git sudo passwd git # 设置用户密码
切换至git用户进行后续操作:
su - git
初始化裸仓库
裸仓库(Bare Repository)不包含工作目录,适合作为中央服务器,在用户家目录下创建项目仓库:
mkdir -p ~/repos/myproject.git cd ~/repos/myproject.git git init --bare
--bare参数会创建.git目录作为根目录,避免混淆工作文件,设置仓库所有者为git用户:
sudo chown -R git:git ~/repos
配置SSH免密访问
Git服务器通常通过SSH协议传输数据,需为每个开发者配置SSH密钥,在开发者本地机器生成密钥:

ssh-keygen -t rsa -b 4096 -C "developer@example.com"
将公钥(~/.ssh/id_rsa.pub通过安全通道发送至服务器,在服务器端创建~/.ssh/authorized_keys并追加公钥:
mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
为开发者添加公钥时,建议使用ssh-copy-id命令或手动验证密钥格式,确保每行一个公钥且无多余空格。
钩子脚本配置
Git钩子(Hooks)用于自动化操作,例如post-receive钩子可在代码推送后执行部署脚本,创建钩子文件:
vim ~/repos/myproject.git/hooks/post-receive ```自动部署到Web目录): ```bash #!/bin/bash git --work-tree=/var/www/myproject --git-dir=/home/git/repos/myproject.git checkout -f
赋予执行权限:
chmod +x ~/repos/myproject.git/hooks/post-receive
需确保/var/www/myproject目录存在且git用户有写入权限:
sudo mkdir -p /var/www/myproject sudo chown -R git:git /var/www/myproject
防火墙与SELinux配置
CentOS默认启用防火墙,需开放SSH端口(22):
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
若启用SELinux,需调整上下文:
sudo semanage fcontext -a -t git_sys_content_t "/home/git/repos(/.*)?" sudo restorecon -Rv /home/git/repos
安全加固建议
- 禁用密码登录:编辑
/etc/ssh/sshd_config,设置PasswordAuthentication no后重启SSH服务:sudo systemctl restart sshd
- 定期备份:通过
rsync或git bundle命令备份裸仓库:git bundle create ~/backup/myproject.gitbundle --all
- 访问控制:通过
gitolite或GitLab实现更精细的权限管理,替代手动管理authorized_keys。
开发者客户端操作
开发者在本地克隆仓库:
git clone git@server_ip:/home/git/repos/myproject.git
后续推送代码:
cd myproject echo "Initial commit" > README.md git add . git commit -m "Initial commit" git push origin master
常见问题处理
若遇到权限错误,检查仓库所有者及SELinux上下文;连接超时则确认防火墙和SSH服务状态,建议通过journalctl -u sshd查看SSH服务日志。
相关问答FAQs
Q1: 如何在CentOS上升级Git到最新版本?
A1: CentOS 7/8默认仓库的Git版本较旧,可通过EPEL仓库升级:
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo yum update git --enablerepo=epel-testing
或从源码编译安装(需安装gcc、make等依赖)。
Q2: Git服务器如何支持HTTPS协议访问?
A2: 可配置Nginx作为反向代理并启用SSL证书:
- 安装Nginx:
sudo yum install nginx - 创建SSL证书(可使用Let's Encrypt免费证书)
- 配置Nginx站点,将
/git请求代理至Git的HTTP服务(需安装git-http-backend) - 设置防火墙规则允许HTTPS流量(443端口)
详细配置可参考Nginx官方文档和Git文档中的"Smart HTTP"章节。
