各位程序猿/媛请注意!前方高能年味来袭~ 🎉🐍 当传统Git Hook遇上东方神秘力量,你的代码仓库即将上演"春风得意马蹄疾,一日看尽长安花"的奇幻场景!
一、技术春联生成器使用说明书
📜 核心黑科技配方
# 本仙丹配方由以下原料炼制:
1. 代码界的灶王爷——Git Hook(实时监听commit现场)
2. 赛博春联印刷机——OpenAI(注入AI仙气)
3. 年味浓缩精华液——七言平仄算法(保证对仗工整)
🧧 使用效果展示
🎁 安装指南(三步召唤神龙)
首先你需要有一个git仓库,在仓库的根目录下,访问.git/hook文件夹,新建prepare-commit-msg文件。
- 将以下符咒贴在
.git/hooks/prepare-commit-msg。
#!/usr/bin/env python3
import sys
import re
from openai import OpenAI
def generate_couplet(text):
prompt_template = f"""
请根据以下编程需求创作技术春联,要求:
1. 严格遵循七言对联格式(上联7字 + 下联7字)
2. 上联侧重技术实现,下联体现业务价值
3. 包含至少1个专业术语(如:缓存/集群/API等)
4. 符合平仄对仗要求(上联仄起平收,下联平起仄收)
5. 融入春节元素(如:龙/福/春等吉祥意象)
6. 技术语义保留度需达到80%以上
示例:
需求:优化数据库查询
输出:索引精修千询快,事务巧控万数安
待转换需求:{{user_input}}
"""
client = OpenAI(
api_key="这里要填上api key",
base_url="如果你配置了代理,这里也要填上"
)
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": prompt_template.format(user_input=text),
}
],
model="gpt-4o",
)
return chat_completion.choices[0].message.content
def main():
with open(sys.argv[1], "r+") as f:
content = f.read()
if content.startswith("春联化"):
new_msg = generate_couplet(content[3:])
f.seek(0)
f.write(new_msg)
f.truncate()
if __name__ == "__main__":
main()
- 授予法器执行权限:
chmod +x .git/hooks/prepare-commit-msg
- 祭出你的第一次春联commit:
git commit --allow-empty -m "春联化 增加XSS防护"
就是这么的酷炫~~~
二、Git Hook 深入探秘
你以为Git Hook只是简单的脚本触发器?No no no~ 它其实是代码宇宙的时空管理局!下面这个「钩子使用九连环」教学,保证让你成为Git Hook庙会的VIP摊主!
🧨 Hook 物种图鉴
Git Hook 家族共有 21种官方成员,就像春节庙会的21个特色摊位:
- 客户端摊位(.git/hooks) :本地庙会,仅自己可见
- 服务端摊位(服务器hooks目录) :团队大集,全员生效
必逛四大网红摊位:
pre-commit # 进庙会前的安检门(检查代码行李)
commit-msg # 春联书写处(加工commit消息)
post-checkout # 购物后的打包处(切换分支自动操作)
pre-push # 快递发货前的验货台(推送前终极检查)
【上联】提交代码不草率,pre-commit把门看
场景:写代码就像包饺子,露馅了可不行!
-
春节版功能:
- 用
prettier给代码“贴春联”(格式化),横批:整齐划一! ESLint化身“灶王爷”,上天言好事,下界保平安(代码无错)。- 禁止提交敏感信息,防止“红包密码泄露”(比如
gitleaks当门神)。
- 用
#!/bin/sh
# 代码扫房,辞旧迎新!
npm run lint || {
echo "⚠️ 兄dei,代码 lint 失败!你是想用 Bug 当年夜饭菜谱吗?"
exit 1
}
【下联】提交信息要规范,commit-msg写春联
场景:提交信息不能像“新年群发祝福”一样随意!
-
春节版规则:
- 必须用
feat: 新增红包动画格式,拒绝“吃了吗”式提交! - 字数不够? “福”字倒贴也救不了你(少于 10 字直接拒)!
- 必须用
#!/bin/sh
# 写春联工具:检查提交信息格式
if ! grep -qE '^(feat|fix|docs|style|福|禿|🐍): ' "$1"; then
echo "
提交信息不合格!参考模板:
feat: 增加舞龙动画 🐉
fix: 修复春晚倒计时Bug 🕒
docs: 更新年夜饭菜单文档 🥟
"
exit 1
fi
【横批】自动部署似财神,post-receive送福来
场景:代码推完,自动部署,财源滚滚!
-
春节版操作:
- 推代码到
main分支?立刻触发**“财神到”脚本**,自动部署生产环境! - 部署成功?Slack 通知变**“恭喜发财”红包雨**!
- 推代码到
#!/bin/sh
# 财神到,部署好!
git --work-tree=/var/www/spring-festival checkout -f
echo "🎉 恭喜!系统已穿上新年皮肤,点击访问:https://春节加班不慌.com 🧧"
【结尾:技术人的新年愿望】
# 2025 新春版 Git Hook 心愿单
- [ ] 愿 `pre-commit` 永不报错,代码如饺子皮一样光滑 🥟
- [ ] 愿 `post-receive` 秒速部署,老板说“年终奖翻倍” 💸
- [ ] 愿 `git push` 永不冲突,同事不再问“你改了我的代码?” 🙏
- [ ] 最关键的:**春节值班不写Bug,Ctrl+S 自动生成红包**! 🧧
Git Hook 核心功能速查表
| Hook 类型 | 钩子名称 | 触发时机 | 核心用途 | 常见场景 | 示例代码片段 | |||
|---|---|---|---|---|---|---|---|---|
| 客户端钩子 | ||||||||
pre-commit | git commit 执行前 | 提交前代码检查 | 代码格式化、Lint 检查、敏感信息拦截 | npm run lint git secrets --scan | ||||
prepare-commit-msg | 生成提交消息模板时 | 动态修改提交信息 | 自动添加分支名、关联 Jira 任务号 | echo "[${BRANCH}] $(cat $1)" > $1 | ||||
commit-msg | 提交消息输入完成后 | 强制规范提交格式 | 校验 Conventional Commits 格式、信息长度 | `grep -qE '^(feat | fix): ' "$1" | exit 1` | ||
pre-push | git push 执行前 | 推送前完整性验证 | 运行完整测试套件、检查依赖安全漏洞 | npm test snyk test | ||||
post-checkout | git checkout 成功后 | 环境同步 | 自动安装依赖、重建索引文件 | npm install git lfs post-checkout | ||||
| 服务端钩子 | ||||||||
pre-receive | 服务端接收推送时 | 全局提交策略控制 | 禁止强制推送、限制分支合并权限 | while read old new ref; do `[ "$ref" != "main" ] | exit 1 done` | |||
post-receive | 服务端接收推送完成后 | 自动化流程触发 | 触发 CI/CD 部署、发送通知 | curl -X POST ${DEPLOY_URL} | ||||
| 扩展工具 | ||||||||
| Husky | 与 Git Hook 绑定 | 跨平台钩子管理 | 统一团队规范、简化配置 | "husky": { "hooks": { "pre-commit": "lint-staged" } } | ||||
| pre-commit (Python框架) | 独立工具 | 多语言检查框架 | 集成 YAML/JSON 校验、Dockerfile 检查 | repos: [{ repo: ... , hooks: [{ id: "flake8" }] }] |