- 使用 Git 自带的 Gitosis 或 Gitolite:这是最经典的方式,通过管理一个特殊的
git用户的authorized_keys文件来控制用户访问权限,Gitolite 是 Gitosis 的升级版,功能更强大,是目前推荐的“纯 SSH”方式。 - 使用 Gogs / GitLab:这是更现代化的方式,它们是完整的 Web 界面的 Git 服务平台,集成了用户管理、权限控制、问题跟踪、CI/CD 等功能,开箱即用。
我将为你详细介绍这两种方式,你可以根据自己的需求选择。

准备工作
在开始之前,请确保你有一台已经安装好 CentOS 7/8/9 的服务器,并且拥有 root 或 sudo 权限,为了方便操作,我们先将系统更新到最新状态。
sudo yum update -y
使用 Gitolite(推荐的传统方式)
这种方式轻量、高效,完全基于 SSH,无需 Web 服务器。
第 1 步:创建 Git 专用用户
为了安全,我们不应该用 root 用户来运行 Git 服务,创建一个名为 git 的系统用户。
sudo adduser git
第 2 步:在服务器上安装 Git 和 Gitolite
# 安装 Git sudo yum install -y git # 安装 Gitolite # Gitolite 通常不在官方仓库中,我们可以从 EPEL 仓库安装,或者从源码安装。 # 这里推荐使用 EPEL 仓库。 sudo yum install -y epel-release sudo yum install -y gitolite3
安装完成后,Gitolite 会自动创建配置文件和仓库,通常位于 /home/git/.gitolite 和 /home/git/repositories。

第 3 步:在客户端生成 SSH 密钥
这一步在你的本地电脑(客户端)上操作,而不是服务器上。
如果你还没有 SSH 密钥,请先生成一对:
# 邮箱可以替换成你自己的,用于标识密钥 ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
一路按回车即可,使用默认的路径(~/.ssh/id_rsa)。
完成后,你会得到 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。

第 4 步:将公钥上传到服务器并初始化 Gitolite
将你刚刚生成的公钥文件(id_rsa.pub)上传到服务器的 /tmp 目录。
# 在客户端使用 scp 命令上传 scp ~/.ssh/id_rsa.pub user@your_server_ip:/tmp/
注意:这里的 user 是你用来登录服务器的普通用户,不是 git 用户。
登录到服务器,使用这个普通用户来初始化 Gitolite。
# 登录服务器 ssh user@your_server_ip # 切换到 git 用户 sudo su - git # 使用 Gitolite 的安装脚本来初始化 # gl-setup 会提示你输入管理员信息,它会读取 /tmp 目录下的 .pub 文件 # 将你上传的 id_rsa.pub 文件作为管理员公钥 gl-setup /tmp/*.pub
gl-setup 会执行以下操作:
- 设置
git用户的.ssh/authorized_keys文件,使其通过 Gitolite 来验证 SSH 连接。 - 创建一个名为
gitolite-admin的仓库,这个仓库用于管理所有仓库的权限。
第 5 步:管理仓库和用户
Gitolite 的管理方式非常巧妙:通过向 gitolite-admin 仓库提交代码来管理权限。
-
克隆
gitolite-admin仓库到你的客户端:# 退出服务器,回到你的本地客户端 exit # 或者 Ctrl+D # 克隆管理仓库 git clone git@your_server_ip:gitolite-admin
-
查看管理仓库结构: 进入
gitolite-admin目录,你会看到两个文件夹:conf/: 存放配置文件,最重要的是gitolite.conf。keydir/: 存放所有用户的公钥,文件名通常与用户名对应(john.pub,jane.pub)。
-
添加新用户:
- 让新用户(
john)生成自己的 SSH 公钥。 - 将
john.pub文件内容复制到gitolite-admin/keydir/john.pub文件中。 - 提交并推送到服务器:
cd gitolite-admin git add keydir/john.pub git commit -m "Add user john" git push
- 让新用户(
-
创建新仓库并设置权限:
- 编辑
conf/gitolite.conf文件,这是一个强大的配置文件,语法如下:repo my-new-project RW+ = alice # alice 对此仓库有读写+创建分支/标签的权限 RW = john # john 对此仓库有读写权限 R = jane # jane 对此仓库只有读权限 - 保存文件,然后提交并推送:
git add conf/gitolite.conf git commit -m "Create my-new-project repo and set permissions" git push
- 编辑
第 6 步:使用新仓库
任何被授权的用户都可以像克隆任何其他 Git 仓库一样克隆它了。
# 在 alice 的电脑上 git clone git@your_server_ip:my-new-project
至此,一个功能完善的 Git 服务器就搭建完成了。
使用 Gogs(推荐现代化方式)
Gogs 是一个用 Go 语言编写的、轻量级的自托管 Git 服务,它有漂亮的 Web 界面,易于安装和使用。
第 1 步:安装必要的依赖
sudo yum install -y git sudo yum install -y wget sudo yum install -y sqlite # Gogs 默认使用 SQLite,生产环境建议用 MySQL/PostgreSQL
第 2 步:创建 Git 用户
同样,我们为 Gogs 创建一个专用用户。
sudo adduser git
第 3 步:下载并安装 Gogs
我们直接下载 Gogs 的二进制文件。
# 切换到 git 用户 sudo su - git # 创建 Gogs 安装目录 mkdir -p ~/gogs cd ~/gogs # 下载最新的 Gogs 版本 (请替换为最新的版本号) wget https://github.com/gogs/gogs/releases/download/v0.13.0/gogs_v0.13.0_linux_amd64.zip unzip gogs_v0.13.0_linux_amd64.zip
第 4 步:配置 Gogs
Gogs 的配置文件是 custom/conf/app.ini,首次运行前,最好先创建一个自定义配置文件。
cd ~/gogs mkdir -p custom/conf touch custom/conf/app.ini
编辑 custom/conf/app.ini 文件,进行基本配置:
APP_NAME = Gogs: Go Git Service RUN_USER = git RUN_MODE = prod [database] # 使用 SQLite,路径是相对于 Gogs 根目录的 DB_TYPE = sqlite3 HOST = 127.0.0.1:3306 NAME = gogs.db USER = root PASSWD = PATH = data/gogs.db [repository] ROOT = /home/git/gogs-repositories [server] # 监听所有网络接口,端口为 3000 HTTP_ADDR = 0.0.0.0 HTTP_PORT = 3000
第 5 步:启动 Gogs
Gogs 提供了一个方便的脚本来管理服务。
# 切换回 root 用户 exit # 创建一个 systemd 服务文件,以便管理 Gogs sudo vim /etc/systemd/system/gogs.service
粘贴到 gogs.service 文件中:
[Unit] Description=Gogs After=syslog.target network.target [Service] # 使用 git 用户运行 User=git WorkingDirectory=/home/git/gogs ExecStart=/home/git/gogs/gogs web RestartSec=2s Type=simple Restart=always [Install] WantedBy=multi-user.target
启动并设置开机自启 Gogs:
sudo systemctl daemon-reload sudo systemctl start gogs sudo systemctl enable gogs
检查服务状态:
sudo systemctl status gogs
如果看到 active (running),说明启动成功。
第 6 步:通过 Web 界面完成安装
- 打开浏览器,访问
http://your_server_ip:3000。 - 你会看到 Gogs 的初始化设置页面。
- 数据库配置:如果你使用了 SQLite,直接使用默认配置即可,如果你配置了 MySQL,需要先创建数据库和用户,然后在这里填写连接信息。
- 应用名称:填写你想要的 Git 服务名称。
- 管理员账户:创建一个管理员账户(用户名、密码、邮箱)。
- 点击 "Install Gogs" 按钮。
安装完成后,你会被重定向到登录页面,现在你已经拥有一个功能齐全的 Web Git 服务平台了!
第 7 步:后续使用
- 创建仓库:登录 Web 界面,点击 "New Repository" 即可创建新仓库。
- 用户管理:在 Web 界面可以方便地添加/删除用户,管理团队和权限。
- 克隆仓库:在仓库页面,你会得到 SSH 或 HTTP 的克隆地址。
方案对比与选择
| 特性 | 方案一 (Gitolite) | 方案二 (Gogs) |
|---|---|---|
| 部署方式 | 命令行,配置文件管理 | Web 界面,图形化管理 |
| 权限管理 | 通过 gitolite-admin 仓库的 Git 提交来管理 |
通过 Web 界面进行图形化管理 |
| 用户管理 | 手动添加公钥到 keydir |
在 Web 界面注册或由管理员添加 |
| Web 界面 | 无 | 有,功能齐全(仓库浏览、问题、Wiki 等) |
| 附加功能 | 仅提供 Git 仓库服务 | 提供问题跟踪、Wiki、Pull/Merge Request、CI/CD 集成等 |
| 资源占用 | 极低,仅依赖 Git 和 SSH | 较低,但比纯 Git 服务多一些 |
| 适用场景 | - 简单、轻量、无需 Web 界面的场景 - 对命令行操作熟悉的团队 - 快速搭建一个权限可控的 Git 服务器 |
- 需要图形化界面的团队 - 项目需要 Wiki、问题跟踪等功能 - 计划集成 CI/CD 流水线 - 适合中小型团队或个人项目 |
总结建议:
- 如果你只是需要一个快速、轻量、安全的 Git 服务器,并且不介意使用命令行来管理权限,Gitolite 是一个绝佳的选择。
- 如果你希望拥有一个现代化的 Web 界面,方便团队成员通过浏览器进行操作,并且需要一些项目管理功能,强烈推荐使用 Gogs,它的安装和后续管理都非常简单。
