Git私有仓库存储建站代码与中转脚本

很多新手建站时习惯在服务器上直接改代码,时间一长就分不清本地和服务器哪个是最新版本。
更糟的是换服务器或重装系统时,代码就丢了。
用Git私有仓库存储建站代码,配合一条中转脚本,就能让代码从本地推送到仓库,仓库再自动同步到服务器——安全、可追溯、省力气。
本文面向完全没有Git经验的用户,从零开始搭建完整流程。

准备条件:你需要哪几样东西

  • 一台你拥有root权限的服务器(演示以CentOS 7+为例)
  • 一台你日常使用的电脑(Windows、macOS或Linux均可)
  • 一个Git私有仓库系统(本文用轻量的Gitea,你也可以用GitHub免费私有库或自建GitLab)
  • 基本的命令行操作能力(跟着本文输入命令就行)

注意: 如果不想自建仓库,直接用GitHub或码云的私有仓库也完全可以,只需跳过下面的Gitea安装步骤,后续的中转脚本配置逻辑相同。

第一步:搭建Git私有仓库(以Gitea为例)

  1. 在服务器上安装Gitea。SSH登录后依次执行:
   sudo yum install -y wget git
   wget -O gitea https://dl.gitea.com/gitea/1.21.5/gitea-1.21.5-linux-amd64
   chmod +x gitea
   ./gitea web

首次运行会自动监听3000端口。
http://服务器IP:3000 访问安装页面,按提示填入管理员信息(不需要数据库,使用默认SQLite即可)。

  1. 创建私有仓库。登录Gitea后台,点击「+」→「新建仓库」,仓库名称填入 website,勾选「私有」(Private),创建完成。

第二步:初始化本地项目并推送到私有仓库

在本地电脑上,你已经有一个建站项目文件夹(比如 myblog)。
打开终端进入该目录,执行:

cd myblog
git init
git add .
git commit -m "first commit"
git remote add origin http://服务器IP:3000/你的用户名/website.git
git push -u origin master

推送时会提示输入Gitea的用户名和密码。
成功后在Gitea仓库页就能看到代码了。

第三步:编写中转脚本实现自动部署到服务器

中转脚本的核心是Git的post-receive钩子。
当代码推送到仓库后,仓库会触发这个脚本,脚本将最新代码检出到服务器上的目标目录(比如 /var/www/html)。

  1. SSH登录服务器,找到Gitea仓库的目录(默认为 ~/gitea-repositories/你的用户名/website.git/)。实际路径取决于你运行Gitea的用户和安装目录,这里假设路径为 /home/git/gitea-repositories/用户名/website.git
  2. 进入该仓库的hooks目录:
   cd /home/git/gitea-repositories/用户名/website.git/hooks
  1. 创建post-receive脚本:
   nano post-receive

粘贴以下内容(路径按你的实际情况修改):

   #!/bin/bash
   TARGET=/var/www/html
   GIT_DIR=/home/git/gitea-repositories/用户名/website.git
   BRANCH=master

   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

注意: 第一行 #!
/bin/bash 必须准确,否则脚本不会执行。

  1. 赋予执行权限:
   chmod +x post-receive
  1. 确保目标目录存在且Gitea运行用户(通常是git)有写入权限:
   sudo mkdir -p /var/www/html
   sudo chown -R git:git /var/www/html

避坑指南:新手最容易出问题的地方

  • SSH用户权限:如果Gitea是以普通用户运行的,那么在hooks里执行的git命令也必须由该用户执行。本文使用git用户,注意普通情况下服务器上可能没有git用户,你需要创建或修改Gitea的运行用户。最简单方式:使用root权限安装Gitea并以root运行,但安全性差。建议用常规方法(如Systemd服务指定User=git)。
  • 路径写死:脚本中的GIT_DIR和TARGET路径一定要和实际一致,大小写敏感。
  • 防火墙:Gitea监听3000端口,需在服务器防火墙放行。
  • 钩子不触发:检查post-receive是否有执行权限,且第一行shebang是否正确。
  • 中文文件乱码:Git配置文件设置 [core] quotepath = false

效果验证与常见问题

验证方法: 在本地的 myblog 目录中修改一个文件(比如加一行文字),然后 git add . && git commit -m "test" && git push
稍等几秒,查看服务器上的 /var/www/html 目录,应该已经同步更新了。

常见问题:

Q:推送时报错“remote: hooks/post-receive: 权限不够”?
A:确认post-receive有可执行权限:chmod +x post-receive

Q:推送后服务器目录没有任何变化?
A:检查目标目录的权限,以及Gitea运行用户是否有写入权限。可以在post-receive脚本第一行加 set -x 开启调试,然后重新推送,看输出的日志。

Q:我的仓库是GitHub或码云,怎么实现自动部署?
A:在GitHub上使用Webhook,让GitHub在收到推送时向服务器发送请求,服务器上运行一个监听服务(如Node.js脚本)来拉取代码。或者使用GitHub Actions一键部署。具体可参考我的另一篇文章《GitHub Webhook实现服务器自动部署》。

如果你正在处理Git私有仓库存储建站代码与中转脚本,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
用上这套流程之后,以后更新网站只需要本地 git push 就够了。

分享到:
上一篇
Jenkins CI/CD自动化发布跨境网站
下一篇
KVM虚拟化住宅主机搭建多测试站点完整教程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意