🧧 新春技术献礼:Git Commit秒变春联神器使用手册

270 阅读4分钟

各位程序猿/媛请注意!前方高能年味来袭~ 🎉🐍 当传统Git Hook遇上东方神秘力量,你的代码仓库即将上演"春风得意马蹄疾,一日看尽长安花"的奇幻场景!


一、技术春联生成器使用说明书

📜 核心黑科技配方

# 本仙丹配方由以下原料炼制:
1. 代码界的灶王爷——Git Hook(实时监听commit现场)
2. 赛博春联印刷机——OpenAI(注入AI仙气)
3. 年味浓缩精华液——七言平仄算法(保证对仗工整)

🧧 使用效果展示

1.png

🎁 安装指南(三步召唤神龙)

首先你需要有一个git仓库,在仓库的根目录下,访问.git/hook文件夹,新建prepare-commit-msg文件。

  1. 将以下符咒贴在.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()
  1. 授予法器执行权限:
chmod +x .git/hooks/prepare-commit-msg
  1. 祭出你的第一次春联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-commitgit commit 执行前提交前代码检查代码格式化、Lint 检查、敏感信息拦截npm run lint git secrets --scan
prepare-commit-msg生成提交消息模板时动态修改提交信息自动添加分支名、关联 Jira 任务号echo "[${BRANCH}] $(cat $1)" > $1
commit-msg提交消息输入完成后强制规范提交格式校验 Conventional Commits 格式、信息长度`grep -qE '^(featfix): ' "$1"exit 1`
pre-pushgit push 执行前推送前完整性验证运行完整测试套件、检查依赖安全漏洞npm test snyk test
post-checkoutgit 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" }] }]