关于 configure-git-webserver
该技能指导搭建基于 Git 的 Web 部署:推送到裸仓库后,由 post-receive 钩子更新 Web 内容目录。内容包括组件配置、权限、服务器选择和流程验证。
主要功能
- 01配置裸 Git 仓库
- 02设置 post-receive 部署钩子
- 03兼容 main 和 master 分支
- 04提供 Web 服务器选择建议
- 05验证组件及端到端流程
适用场景
- 01Git 推送后发布 Web 文件
- 02测试推送触发部署的配置
- 03排查钩子权限与部署故障
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ letta-ai/ skills --skill configure-git-webserver安装后在 Claude Code 中输入/configure-git-webserver确认已加载。
详细介绍
配置 Git Web 服务器
概述
本技能介绍如何搭建基于 Git 的 Web 部署系统:向 Git 仓库推送内容时,系统会自动将内容部署到 Web 服务器。典型工作流包括创建裸 Git 仓库、配置 post-receive 钩子以部署内容,以及运行 Web 服务器来提供已部署的文件。
方法
组件识别
实施前,先识别所需的所有组件:
- 裸 Git 仓库 - 接收推送的中央仓库
- Web 内容目录 - 提供已部署文件的目录
- Post-receive 钩子 - 在推送时自动执行部署
- Web 服务器 - 提供已部署的内容
- 用户访问权限 - 用户向仓库推送的权限
实施顺序
按依赖顺序执行任务:
- 首先创建裸 Git 仓库(其他组件依赖其位置)
- 创建 Web 内容目录
- 创建并配置 post-receive 钩子(依赖仓库和 Web 目录)
- 启动 Web 服务器(依赖 Web 目录已存在)
- 根据需要配置用户访问权限
Post-Receive 钩子设计
post-receive 钩子应当:
- 处理多个分支名称(兼容
master和main) - 使用
git --work-tree检出到 Web 目录 - 设置为可执行(
chmod +x) - 包含正确的 shebang(
#!/bin/bash)
钩子结构示例:
#!/bin/bash
while read oldrev newrev ref
do
branch=$(echo $ref | cut -d/ -f3)
if [ "$branch" = "main" ] || [ "$branch" = "master" ]; then
git --work-tree=/path/to/web/dir --git-dir=/path/to/repo checkout -f $branch
fi
done
Web 服务器选项
根据环境考虑可用选项:
python3 -m http.server- 简单、通常已可用,但为单线程nginx- 可用于生产环境,但需要安装node http-server- 需要 Node.jsbusybox httpd- 轻量,通常在精简环境中可用
验证策略
组件级验证
测试完整工作流之前,先独立验证每个组件:
-
仓库验证:检查裸仓库是否存在且结构正确
ls -la /path/to/repo # Should show HEAD, objects/, refs/, etc. -
钩子验证:确认钩子存在且可执行
ls -la /path/to/repo/hooks/post-receive -
Web 服务器验证:确认服务器正在运行并处于监听状态
ss -tlnp | grep :PORT # or netstat -tlnp, or ps aux | grep server
端到端测试
测试完整工作流:
- 克隆仓库(首次测试时使用本地路径)
- 创建测试文件并提交
- 推送到仓库
- 验证文件出现在 Web 目录中
- 验证可通过 HTTP 访问该文件
预先检查可用命令
使用系统命令前,先确认命令是否可用,以减少反复尝试:
command -v netstat || command -v ss # Network status
command -v systemctl || command -v service # Service management
常见问题
持久性问题
问题:后台进程(例如 python3 -m http.server &)在系统重启后无法继续运行。
缓解措施:生产环境中,请创建 systemd 服务或使用进程管理器。测试时可以使用后台进程,但应说明其局限性。
权限问题
问题:用户无法向仓库推送,或者钩子无法写入 Web 目录。
缓解措施:
- 检查仓库的所有权和权限
- 确保运行钩子的用户对 Web 目录具有写入权限
- 检查钩子本身是否可执行
分支名称处理
问题:钩子只处理 master,但用户推送到 main(或反之)。
缓解措施:在钩子逻辑中处理两种常见的默认分支名称。
测试方法
问题:使用本地路径(/git/server)进行测试可能成功,但基于 SSH 的访问(user@server:/git/server)可能失败。
缓解措施:如果需要 SSH 访问,请将 SSH 配置和用户访问权限与 Git/Web 功能分开验证。
钩子中的错误处理
问题:钩子失败时不会显示错误,导致难以调试。
缓解措施:在钩子中添加错误输出和日志记录:
exec 2>&1 # Redirect stderr to stdout
set -e # Exit on error
单线程 Web 服务器
问题:像 python3 -m http.server 这样的简单 Web 服务器是单线程的,不适合并发访问。
缓解措施:记录此限制。用于生产环境时,请使用 nginx 等合适的 Web 服务器。
任务拆分指南
避免将任务跟踪拆分得过于细致。将相关操作归为一组:
- 推荐:“设置裸 Git 仓库并配置 post-receive 钩子”
- 避免:分别创建“创建目录”“运行 git init”“创建钩子文件”“将钩子设为可执行”等任务
任务跟踪应聚焦于逻辑里程碑,而不是单条命令。