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

如何利用Git Hooks仅部署单个文件夹?GoDaddy cPanel钩子配置疑问

解决Git Hooks部署时忽略开发文件&仅部署单个文件夹的问题

嘿,刚好这俩需求可以一起搞定!既然你已经在cPanel上搭好了Git Hooks,那只需要修改post-receive钩子脚本,就能实现推GitHub时保留开发文件,服务器部署时只同步需要的文件夹,完全不冲突。

核心思路

cPanel默认的Git部署会全量checkout仓库内容,但我们可以用git archive命令精准导出指定文件夹的内容,跳过/src这类开发目录——这样GitHub能收到所有你没在.gitignore里排除的文件,而服务器只部署生产需要的资源。

具体操作步骤

1. 编辑post-receive钩子文件

找到你的Git裸仓库的hooks目录(通常路径是~/repos/你的项目名.git/hooks/post-receive),用cPanel的文件管理器或者SSH打开这个文件,替换默认内容为下面的脚本:

#!/bin/bash
# 配置你的仓库路径和部署目录
REPO="$HOME/repos/your-project.git"
# 这里改成你的cPanel网站根目录,比如public_html或者子目录
DEPLOY_DIR="$HOME/public_html"

# 切换到部署目录,失败则退出
cd "$DEPLOY_DIR" || { echo "部署目录不存在!"; exit 1; }

# 可选:清空部署目录的旧文件(如果需要完全替换,注意保留用户上传的文件!)
# rm -rf "$DEPLOY_DIR"/*

# 从仓库导出/public文件夹的内容到部署目录
git --git-dir="$REPO" archive HEAD:public | tar x -f -

# 如果还有其他需要部署的单个文件/文件夹,重复上面的命令即可
# 比如导出根目录的配置文件:
# git --git-dir="$REPO" archive HEAD:config.prod.php | tar x -f -

echo "✅ 部署完成:仅同步了public文件夹,已忽略src等开发文件"

2. 给钩子文件加可执行权限

如果是用SSH操作,运行:

chmod +x ~/repos/your-project.git/hooks/post-receive

如果用cPanel文件管理器,右键钩子文件,修改权限为755(所有者读/写/执行,组和其他读/执行)。

3. 测试验证

  • 本地推代码到GitHub:正常推送即可,.gitignore没排除的/src会被推送到GitHub,完全不受服务器钩子影响。
  • 推代码到cPanel的仓库:钩子会自动把/public文件夹的内容同步到部署目录,/src完全不会出现在服务器上。

注意事项

  • 确保/public文件夹在Git仓库中是被追踪的(没被.gitignore忽略),否则git archive找不到它。
  • 如果部署目录有需要保留的用户上传文件(比如uploads文件夹),不要用rm -rf清空,建议把静态部署内容和用户文件分开存放,比如部署到public_html/static,用户文件放public_html/uploads。
  • 手动执行钩子脚本可以快速排查问题:cd ~/repos/your-project.git/hooks && ./post-receive,看是否有报错信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:22:27