上一篇
如何快速搭建Git服务器仓库?
- 行业动态
- 2025-04-23
- 2520
在Git中创建服务器仓库需通过SSH登录服务器,执行
mkdir
创建目录并进入,使用 git init --bare
初始化为裸仓库,本地项目添加远程仓库地址 git remote add origin user@server:/path/to/repo.git
,通过 git push
推送代码完成部署,裸仓库不包含工作区,专用于共享协作。
通过SSH连接到服务器
确保已具备服务器的访问权限(SSH密钥或用户名密码)。
ssh username@server_ip
安装Git(如未安装)
在服务器上通过包管理器安装Git:
# Ubuntu/Debian sudo apt update && sudo apt install git -y # CentOS/RHEL sudo yum install git -y
方法1:创建裸仓库(推荐)
裸仓库(Bare Repository)是Git服务器仓库的标准形式,仅存储版本历史,不包含工作目录。
创建仓库目录
mkdir -p /opt/git/project.git cd /opt/git/project.git
初始化裸仓库
git init --bare
设置权限(关键步骤)
sudo chown -R git:git /opt/git/project.git
注:建议创建一个专用用户(如
git
)管理仓库,避免使用root
账户。
本地开发机操作
在本地机器上克隆远程仓库:
git clone git@server_ip:/opt/git/project.git
方法2:自动化部署(钩子脚本)
通过Git钩子实现代码提交后自动同步到服务器目录(如Web根目录)。
在服务器上创建接收仓库
mkdir -p /var/www/project cd /var/www/project git init
在裸仓库中添加钩子脚本
编辑裸仓库的hooks/post-receive
文件:#!/bin/sh TARGET="/var/www/project" GIT_DIR="/opt/git/project.git" BRANCH="main" while read oldrev newrev ref do if [ "$ref" = "refs/heads/$BRANCH" ]; then echo "Deploying $BRANCH to $TARGET..." git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCH fi done
赋予脚本执行权限
chmod +x /opt/git/project.git/hooks/post-receive
方法3:使用第三方工具(高可维护性)
推荐工具:
- Gitea:轻量级自托管Git服务
- GitLab:企业级DevOps平台
以Gitea为例:
- 通过Docker快速安装:
docker run -d --name=gitea -p 3000:3000 -v /opt/gitea:/data gitea/gitea:latest
- 访问
http://server_ip:3000
完成初始化配置。 - 创建仓库后,通过SSH或HTTP克隆使用。
安全增强建议
SSH密钥认证
禁用密码登录,仅允许密钥对连接:# 本地生成密钥对 ssh-keygen -t ed25519 # 上传公钥到服务器 ssh-copy-id git@server_ip
防火墙配置
仅开放必要端口(如SSH的22端口、HTTP的80/443端口)。定期备份
使用rsync
或tar
定时备份仓库目录:tar -czvf backup_$(date +%F).tar.gz /opt/git
常见问题排查
- 权限拒绝错误:检查目录所有权(
chown -R git:git
)。 - 钩子脚本不生效:确保脚本有执行权限,且路径无拼写错误。
- 克隆速度慢:优化服务器网络或使用
git config --global pack.windowMemory 256m
。
引用说明
- Git官方文档:https://git-scm.com/doc
- Gitea官方指南:https://docs.gitea.io
- GitLab安装手册:https://docs.gitlab.com/ee/install/
- Nginx反向代理配置:https://nginx.org/en/docs/
- Let’s Encrypt HTTPS:https://letsencrypt.org