You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git仓库被清空后,如何以最小破坏性恢复并重新启用基于Git Hooks的自动部署?

恢复Git仓库并重新启用自动部署的最小破坏性方案

根据你描述的场景,客户操作导致远程Git仓库(含用于接收推送的裸仓库和工作区仓库)丢失,我们可以直接利用public目录中现存的Live站点文件来完成最小破坏性恢复,具体步骤如下:

1. 将现有public目录转为Git工作仓库

public目录里是当前Live站点的最新内容,我们直接基于它创建仓库,完全保留现有文件:

# 切换到public目录
cd /www/[sitename]_571/public

# 初始化Git仓库
git init

# 暂存所有现有文件
git add .

# 提交初始版本,备注清楚恢复背景
git commit -m "Restore live site files after Git repo loss"

2. 重建private目录下的裸仓库(用于接收推送触发部署)

自动部署依赖这个裸仓库的post-receive钩子,我们重新创建它并关联到工作仓库:

# 切换到private目录,若目录不存在则先创建
cd /www/[sitename]_571/private
mkdir -p /www/[sitename]_571/private

# 创建裸仓库
git init --bare [sitename].git

# 进入裸仓库的hooks目录准备配置钩子
cd [sitename].git/hooks

3. 恢复post-receive钩子脚本

重新创建原有的钩子脚本(替换[sitename]为实际站点名称),并设置执行权限:

# 创建并编辑post-receive文件
nano post-receive

粘贴以下脚本内容:

#!/bin/bash
TARGET="/www/[sitename]_571/public"
GIT_DIR="/www/[sitename]_571/private/[sitename].git"
BRANCH="master"
while read oldrev newrev ref
do
    # only checking out the master (or whatever branch you would like to deploy)
    if [[ $ref = refs/heads/$BRANCH ]]; then
        echo "Ref $ref received. Deploying ${BRANCH} branch to production..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
    else
        echo "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."
    fi
done

保存退出后设置执行权限:

chmod +x post-receive

4. 同步public仓库内容到裸仓库

确保工作仓库和裸仓库内容一致,为后续推送做准备:

# 返回public目录
cd /www/[sitename]_571/public

# 将裸仓库添加为远程仓库
git remote add origin /www/[sitename]_571/private/[sitename].git

# 推送master分支到裸仓库
git push origin master

5. 更新本地仓库的远程地址(按需操作)

如果本地仓库原远程地址指向该裸仓库,确认地址无误即可;若有变更,执行以下命令更新:

# 在本地仓库终端执行
git remote set-url <environment> ssh://你的服务器用户名@服务器IP/www/[sitename]_571/private/[sitename].git

6. 测试自动部署流程

执行本地推送命令验证是否能正常触发部署:

git push <environment> master

查看终端输出是否出现Deploying master branch to production...提示,同时检查public目录文件是否正确更新。

关键注意点

  • 整个过程未修改public目录的现有站点文件,仅为其添加Git仓库标记,属于最小破坏性操作;
  • 若客户操作仅删除了裸仓库,而public目录下的.git文件夹仍存在,可直接跳过步骤1,从步骤2开始执行;
  • 钩子脚本逻辑与原方案完全一致,确保自动部署流程无变化。

内容的提问来源于stack exchange,提问作者Jillian Hoenig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:52:40