Git代码管理服务器配置使用:零基础搭建Git代码管理服务器
为什么你需要自己的Git代码管理服务器
很多新手在团队协作时习惯用Github或Gitee,但有些项目涉及敏感数据或内网开发,自建Git代码管理服务器就成了刚需。
自己搭一台,不受第三方平台限制,管理权限也更灵活。
而且流程并不复杂——只要有一台Linux服务器,跟着下面的步骤就能跑通。
服务器端准备:安装Git与创建专用用户
进入你的服务器(推荐Ubuntu 20.04+或CentOS 7+),先更新包管理器并安装Git。
# Ubuntu / Debian
sudo apt update && sudo apt install git -y
# CentOS / RHEL
sudo yum install git -y
安装完成后验证版本:git --version,出现类似 git version 2.25.1 即可。
为了安全,专门创建一个名为 git 的系统用户,用它来管理仓库。
sudo useradd -m -s /bin/bash git
sudo passwd git
创建后,后续所有仓库都放在 /home/git/repos/ 下。
初始化你的第一个裸仓库
裸仓库(bare repository)只存储版本历史,不含工作目录,专用于远程推送。
切换到git用户并创建仓库文件夹。
sudo -i -u git
mkdir -p ~/repos && cd ~/repos
git init --bare my-project.git
执行后 my-project.git 文件夹就出现了,里面是Git内部数据。
注意仓库名通常以 .git 结尾,这是约定俗成的。
配置SSH密钥实现免密访问
现在仓库已经就绪,但还需要让团队成员能通过SSH连接。
先在本机(客户端)生成密钥对(如果还没有)。
ssh-keygen -t rsa -b 4096 -C "you@example.com"
# 一路回车即可,密码可留空
然后将公钥 ~/.ssh/id_rsa.pub 的内容添加到服务器的 /home/git/.ssh/authorized_keys 文件里。
回到服务器操作:
sudo -i -u git
mkdir -p ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
# 编辑 authorized_keys,粘贴客户端的公钥内容
vim ~/.ssh/authorized_keys
重点: 务必检查目录和文件权限,否则SSH会拒绝连接。~/.ssh 必须是700, authorized_keys 必须是600。
现在在客户端测试连接:
ssh -T git@你的服务器IP
如果出现 Welcome to Git, the user git! 之类的欢迎信息(实际可能只提示连接成功),说明SSH配置正确。
常见踩坑点与解决方案
- Permission denied (publickey):检查
authorized_keys权限是否为600,.ssh目录是否为700,且公钥内容粘贴无误(不要有多余空格或换行)。 - 仓库路径错误:克隆时路径应该是
git@你的IP:/home/git/repos/my-project.git,注意使用绝对路径。如果提示does not appear to be a git repository,检查目录是否存在。 - 无法推送:确保仓库是
--bare初始化的,非裸仓库默认拒绝接收推送。若一定要用普通仓库,需运行git config receive.denyCurrentBranch ignore,但不推荐。 - 防火墙或端口问题:SSH默认端口22,确保服务器防火墙放行。可用
sudo ufw allow 22(Ubuntu)或firewall-cmd(CentOS)。
验证你的Git服务器是否正常工作
在客户端本地新建一个项目,关联远程仓库并推送。
mkdir test-project && cd test-project
git init
echo "# Hello Git Server" > README.md
git add . && git commit -m "init"
git remote add origin git@你的服务器IP:/home/git/repos/my-project.git
git push -u origin master
如果推送成功,再从另一个空目录克隆验证:
git clone git@你的服务器IP:/home/git/repos/my-project.git
看到 README.md 被下载下来,说明整套Git代码管理服务器配置使用已完美跑通。
团队其他成员只需将自己的SSH公钥加入服务器的 authorized_keys 即可协作。
遇到报错时优先回顾上面的避坑点,一般都能顺利解决。