Git 服务器搭建(深入浅出)

Git 服务器搭建:从零开始构建你的专属代码仓库

在团队协作开发中,代码的版本管理至关重要。Git 作为目前最主流的分布式版本控制系统,早已成为开发者日常工作的标配。但你有没有想过,为什么我们总是用 GitHub、GitLab 这些公共平台?其实,对于企业内部项目、私密项目或教学实验,自建一个 Git 服务器才是更安全、更灵活的选择。

今天,我们就来手把手带你完成一次完整的 Git 服务器搭建 过程。整个流程清晰、可复现,适合初学者从零开始学习,也适合中级开发者作为参考手册使用。不需要复杂的硬件,一台 Linux 服务器(哪怕是虚拟机)就能搞定。


选择合适的服务器环境

在动手之前,先明确你的部署目标。通常,我们建议使用 Linux 系统作为 Git 服务器的宿主,因为其稳定性和对命令行工具的良好支持。Ubuntu 和 CentOS 是最常用的两个发行版。

如果你没有服务器,可以考虑以下几种方式:

  • 使用云服务商(如阿里云、腾讯云)购买一台轻量应用服务器(1核2G内存足够)
  • 本地虚拟机(如 VirtualBox 安装 Ubuntu Server)
  • 树莓派(Raspberry Pi)也可以运行 Git 服务,适合学习和小项目

💡 小贴士:服务器搭建的本质是“把一台电脑变成代码的保管员”。它不负责写代码,但要确保代码不丢、权限清晰、访问可控。


安装 Git 与配置基础环境

我们以 Ubuntu 22.04 为例,开始安装 Git。这一步是所有后续操作的基础。

sudo apt update

sudo apt install git -y

git --version

✅ 命令说明:
apt update 是更新软件源,确保能获取到最新版本。
apt install git -y 安装 Git 并自动确认,避免交互中断。
git --version 检查 Git 是否正确安装,输出类似 git version 2.34.1 表示成功。

安装完成后,我们还需要设置 Git 的全局配置,这是每个开发者都应了解的基础。

git config --global user.name "张三"

git config --global user.email "zhangsan@company.com"

⚠️ 注意:这些配置是“全局”的,意味着所有项目都会默认使用这个信息。如果参与多个项目,也可以在项目目录下单独设置(使用 --local 参数)。


创建 Git 用户与权限管理

为了安全起见,我们不应该用 root 用户运行 Git 服务。创建一个专用用户来管理代码仓库是最佳实践。

sudo adduser --system --group --no-create-home git

sudo passwd git

🛡️ 安全提示:
--system 表示这是系统用户,不会被当作普通用户登录。
--no-create-home 避免创建用户主目录,减少安全隐患。
--group 自动创建同名用户组,便于权限分配。

接下来,我们为这个用户设置 SSH 访问权限。SSH 是 Git 服务器最常用的远程访问方式,安全且高效。

sudo mkdir -p /home/git/.ssh

sudo chown git:git /home/git/.ssh
sudo chmod 700 /home/git/.ssh

sudo touch /home/git/.ssh/authorized_keys
sudo chown git:git /home/git/.ssh/authorized_keys
sudo chmod 600 /home/git/.ssh/authorized_keys

🔐 重要:
authorized_keys 文件用于存放允许登录的公钥。
chmod 600 保证只有用户自己能读写,防止权限泄露。

现在你可以把开发者的公钥(通常是 ~/.ssh/id_rsa.pub 内容)添加到这个文件中。例如:

echo "ssh-rsa AAAAB3NzaC1yc2E... user@workstation" | sudo tee -a /home/git/.ssh/authorized_keys

✅ 测试连接:
在本地终端执行 ssh git@your-server-ip,如果出现 Permission denied,请检查公钥是否正确、权限是否设置对。


初始化 Git 仓库并设置共享访问

现在,我们来创建一个真正的代码仓库。这个仓库将作为团队代码的“中央服务器”。

sudo su - git

mkdir /home/git/project.git

cd /home/git/project.git
git init --bare

📌 关键概念:
--bare 是“裸仓库”的标志,它没有工作区,只有 Git 的元数据。
裸仓库不能直接编辑文件,但可以接收推送(push)和拉取(pull),非常适合服务器端使用。
相当于“只读的数据库”,但允许别人写入。

接下来,我们设置仓库的属主和权限,确保 Git 用户能正常操作。

sudo chown -R git:git /home/git/project.git

sudo chmod -R 755 /home/git/project.git

本地项目与服务器同步

现在服务器端准备好了,我们来演示如何从本地推送代码。

假设你本地有一个 Vue 3.0 项目,目录结构如下:

my-vue-app/
├── public/
├── src/
├── package.json
└── README.md

第一步:初始化本地仓库

cd my-vue-app

git init

git add .

git commit -m "Initial commit: Vue 3.0 project"

第二步:添加远程仓库地址

git remote add origin git@your-server-ip:/home/git/project.git

git remote -v

第三步:推送到服务器

git push -u origin main

✅ 成功输出示例:

Counting objects: 3, done.
Writing objects: 100% (3/3), 256 bytes | 256.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@your-server-ip:/home/git/project.git
 * [new branch]      main -> main

💡 小比喻:
本地仓库是“你的笔记本”,服务器仓库是“公司档案室”。你写完内容后,把笔记本交给档案员(push),他帮你存档并备份。


多人协作与权限控制

当多个开发者需要访问同一个仓库时,权限管理就显得尤为重要。

方法一:通过 SSH 公钥控制访问

每个开发者只需将自己的公钥添加到 /home/git/.ssh/authorized_keys 文件中,就可以访问服务器。

方法二:使用 Gitolite 或 GitLab CE(进阶)

对于更复杂的权限需求(如:只读、读写、管理权限),推荐使用 Gitolite 或 GitLab CE。它们支持基于分支、路径的细粒度权限控制。

📊 举个例子:

开发者 权限类型 可操作分支
Alice 读写 main, dev
Bob 只读 main
Carol 管理 所有分支

这类工具虽然配置稍复杂,但对中大型团队非常实用。


常见问题与排查指南

Git 服务器搭建 的过程中,常见问题集中在权限和网络上。

问题 1:SSH 连接被拒绝

检查点:

  • 确认 authorized_keys 文件权限是 600
  • 确认 .ssh 目录权限是 700
  • 确认 sshd_config 中允许 PasswordAuthentication no(如果使用密钥登录)

问题 2:推送时报错 Permission denied (publickey)

确认:

  • 本地 ~/.ssh/id_rsa 是否存在
  • 公钥是否正确复制到服务器
  • 使用 ssh -T git@your-server-ip 测试连接

问题 3:推送失败,提示 remote ref does not exist

这通常是因为本地没有创建 main 分支,而远程期望的是 main。解决方法:

git checkout -b main
git push -u origin main

总结与建议

通过本文,你已经完成了从零开始搭建一个安全、稳定的 Git 服务器的全过程。这个过程虽然涉及多个步骤,但每一步都有明确的目的和意义。

  • 选择合适的系统环境是基础;
  • 安装 Git 并配置用户信息是起点;
  • 创建专用用户并配置 SSH 是安全核心;
  • 初始化裸仓库是服务器端的“容器”;
  • 本地项目同步是协作的桥梁;
  • 权限控制是团队管理的关键。

🌟 最后提醒:
自建 Git 服务器不等于“随意开放”。它需要你主动维护,定期备份,设置防火墙,甚至考虑使用 HTTPS + 证书加密。对于生产环境,建议结合 Nginx 反向代理,实现 HTTPS 访问。

掌握 Git 服务器搭建,不仅让你能掌控代码命运,也标志着你从“使用工具”迈向“构建系统”的重要一步。别再依赖 GitHub 了,是时候为你的项目建一个属于自己的“数字档案馆”了。