当前位置: 首页 > article >正文

Git 钩子:特定操作脚本

Git 钩子

  • 特定 Git 操作发生时自动触发脚本

  • 可以从提交规范、代码质量、自动化流程、分支管理、安全性检查等多个方面进行配置,帮助团队提高开发效率和代码质量;

本地

记录提交检验
  • commit-msg

  • 修改:\test\.git\hooks\commit-msg.sample\test\.git\hooks\commit-msg

  • 设置可执行权限:chmod +x \test\.git\hooks\commit-msg

#!/bin/bash
# 获取提交信息文件路径
commit_msg_file=$1
commit_msg=$(cat "$commit_msg_file")
# 定义提交信息格式的正则表达式
commit_regex="^(revert: )?(create|fixed|added|chore|refactor|hotfix|revert|update|build|test|save)($.+$)? - .{1,50}$"
​
warn() {
    echo -e "\033[41;37m $1 \033[0m \033[1;31m $2 \033[0m"
}
​
red() {
    echo -e "\033[31m$1\033[0m"
}
​
green() {
    echo -e "\033[32m$1\033[0m"
}
​
yellow() {
    echo -e "\033[33m$1\033[0m"
}
​
cyan() {
    echo -e "\033[34m$1\033[0m"
}
​
link() {
    echo -e "\033[4;34m$1\033[0m"
}
​
# 验证提交信息是否符合格式
if [[ ! $commit_msg =~ $commit_regex ]]; then
    # 输出错误信息
    echo
    warn "ERROR","无效的 commit 提交格式"
    echo
    echo -e "\033[31m请遵循以下正确的格式提交。例如:\033[0m"
    echo -e "\033[4;31mgit commit -m \"feat: 完成详情\"\033[0m"
    echo
    echo -e "\033[32m以下是一些示例:\033[0m"
    echo
    echo "+--------+-------------------+---------------------------+"
    printf "| %s\t | %-16s\t | %-24s\t |\n" "索引" "注释" "contect"
    echo "+--------+-------------------+---------------------------+"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "0" "新建项目" "create - 创建 XXX"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "1" "修复异常" "fixed - XXX bug"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "2" "新增特性" "added - 特性 XXX"
    printf "| %-4s\t | %-20s\t | %-28s\t |\n" "3" "构建新流程" "chore - 同步分支"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "4" "模块重构" "refactor - XXX"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "5" "紧急修复" "hotfix - XXX bug"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "6" "版本回滚" "revert - V1.0.1.0"
    printf "| %-4s\t | %-20s\t | %-28s\t |\n" "7" "更新文档" "update - 更新记录"
    printf "| %-4s\t | %-20s\t | %-28s\t |\n" "8" "项目打包" "build - 运行环境"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "9" "调试测试" "test - 测试 XXX"
    printf "| %-4s\t | %-20s\t | %-24s\t |\n" "10" "保存进度" "save - 暂存 XXXX"
    echo "+--------+-------------------+---------------------------+"
    echo
    red "描述:文字描述不得超过 50 个字符,推荐以动词开头:创建、修复、完成、修改、增加、更新等。"
    echo
    echo -e "更多详情请参考:"
    link "https://blog.csdn.net/weixin_43718346"
    echo
    exit 1
fi
​
#echo "+--------+-----------------------+-------------------------------+"
#printf "| %-8s | %s\t\t\t | %s\t\t\t |\n" "索引" "注释" "contect"
#echo "+--------+-----------------------+-------------------------------+"
#printf "| %-6s | %s\t\t | %s\t |\n" "0" "新建项目" "create - 创建 XXX 项目"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "1" "修复 bug" "fixed - 修复 XXX bug"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "2" "新增特性" "added - 新增特性 XXX"
#printf "| %-6s | %s\t\t | %s\t |\n" "3" "改变构建流程" "chore - 同步[分支名称]"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "4" "重构内容" "refactor - 重构 XXX"
#printf "| %-6s | %s\t\t | %s\t |\n" "5" "紧急修复" "hotfix - 紧急修复 XXX"
#printf "| %-6s | %s\t\t | %s\t |\n" "6" "版本回滚" "revert - 回滚 XXX 版本"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "7" "更新文档" "update - 更新文档"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "8" "打包项目" "build - 打包 XXX"
#printf "| %-6s | %s\t\t | %s\t\t |\n" "9" "测试文件" "test - 测试 XXX"
#printf "| %-6s | %s\t | %s\t\t |\n" "10" "暂存文件(保存进度)" "save - 暂存 XXXX"
#echo "+--------+-----------------------+-------------------------------+"
​
exit 0

服务器

提交检验
  • pre-receive

  • 修改:\test\.git\hooks\pre-receive.sample\test\.git\hooks\pre-receive

  • 设置可执行权限:chmod +x \test\.git\hooks\pre-receive

#!/bin/bash
​
warn() {
    echo -e "\033[41;37m $1 \033[0m \033[1;31m $2 \033[0m"
}
​
red() {
    echo -e "\033[31m$1\033[0m"
}
​
green() {
    echo -e "\033[32m$1\033[0m"
}
​
yellow() {
    echo -e "\033[33m$1\033[0m"
}
​
cyan() {
    echo -e "\033[34m$1\033[0m"
}
​
link() {
    echo -e "\033[4;34m$1\033[0m"
}
​
while read oldrev newrev refname; do
​
    # 获取推送的用户名
    username=$(git log -1 --pretty=format:%an $newrev)
    # # 定义允许操作的用户列表
    # allowed_users=("user1" "user2" "user3")
    # if [[ ! " ${allowed_users[@]} " =~ " ${username} " ]]; then
        # echo "错误: 用户 '$username' 没有操作权限。"
        # exit 1
    # fi
    
     # # 获取推送的邮箱
    # email=$(git log -1 --pretty=format:%ae $new_value)
    # # 定义邮箱规则的正则表达式(必须以 @hanslaser.com 结尾)
    # email_re="@hanslaser\.com$"
    # # 验证邮箱是否符合规则
    # if [[ ! $email =~ $email_re ]]; then
        # echo "错误: 邮箱 '$email' 必须以 @hanslaser.com 结尾。"
        # exit 1
    # fi
    
    # # 定义命名规则的正则表达式(英文名+数字工号,且工号不超过6位)
    # regex="^[a-zA-Z]+[0-9]{1,6}$"
    # # 验证用户名是否符合规则
    # if [[ ! $username =~ $regex ]]; then
        # echo "错误: 用户名 '$username' 必须为英文名+数字工号,且工号不超过6位。"
        # exit 1
    # fi
    
    # if [[ $refname != "refs/heads/main" ]]; then
        # echo "错误: 禁止创建新的分支!"
        # exit 1
    # fi
    
done
exit 0


http://www.kler.cn/a/599176.html

相关文章:

  • GithubPages+自定义域名+Cloudfare加速+浏览器收录(2025最新排坑)
  • unix网络编程
  • 【XPipe】一款好用的SSH工具
  • 丐版插入selectdb模拟
  • Debian,Ubuntu,设置/etc/vim/vimrc.tiny解决:上下左右变成ABCD,backspace退格键失效的问题
  • netplan是如何操控systemd-networkd的? 笔记250324
  • 常见框架漏洞攻略-ThinkPHP篇
  • 搜广推校招面经五十七
  • C语言入门教程100讲(40)文件定位
  • search_fields与filterset_fields的使用
  • 【参考资料 II】C 运算符大全:算术、关系、赋值、逻辑、条件、指针、符号、成员、按位、混合运算符
  • 多线程编程
  • 模糊数学 | 模型 / 集合 / 关系 / 矩阵
  • endnote相关资料记录
  • V8引擎源码编译踩坑实录
  • vue3 如何清空 let arr = reactive([])
  • React Native集成到现有原生Android应用
  • WebGPU实战:Three.js性能优化新纪元
  • SpringMVC请求和响应
  • 练习题:101