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# 输出错误信息echowarn "ERROR","无效的 commit 提交格式"echoecho -e "\033[31m请遵循以下正确的格式提交。例如:\033[0m"echo -e "\033[4;31mgit commit -m \"feat: 完成详情\"\033[0m"echoecho -e "\033[32m以下是一些示例:\033[0m"echoecho "+--------+-------------------+---------------------------+"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 "+--------+-------------------+---------------------------+"echored "描述:文字描述不得超过 50 个字符,推荐以动词开头:创建、修复、完成、修改、增加、更新等。"echoecho -e "更多详情请参考:"link "https://blog.csdn.net/weixin_43718346"echoexit 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# fidone
exit 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39695.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

职坐标:互联网行业职业发展路径解析

内容概要 当前,互联网行业正以指数级速度重塑全球产业格局。数据显示,我国互联网市场规模在2019年上半年实现17.9%的同比增速,而随着工业互联网、5G等前沿技术的加速落地,这一增长趋势仍在强化。工信部近期发布的《新型信息基础设…

红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法

红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件,一种是R3D,一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构,使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件,这种文件解码需要使…

Gitee上库常用git命令

Gitee上库常用git命令 1、Fork 项目2、个人仓库修改3、追加提交4、创建PR5、多笔commit合一 1、Fork 项目 2、个人仓库修改 git add . // -s 表示自动添加邮箱签名信息,-m表示其后跟随commit描述 git commit -sm “add transition freeze” git push origin [目标…

阿里开源的免费数据集成工具——DataX

企业里真实的数据流转是什么样子的呢? 左侧描述了一个企业真实的样子,我们总是需要把数据从一个地方搬到另一个地方,最后就是搬来搬去搬成了一张张解不开的网。 右侧则表达了使用DataX为中心实现数据的同步。 什么是DataX DataX是一个异构…

SpringBoot学习笔记(主)

文章目录 SpringBoot概述自动装配(部分)概述原理简述相关解释源码位置EnableAutoConfigurationAutoConfigurationImportSelector 配置文件yaml语法单双引号列表多行字符串 配置文件的位置和加载顺序配置文件取值运行jar包 Springboot整合springmvc自动管…

python多线程和多进程的区别有哪些

python多线程和多进程的区别有七种: 1、多线程可以共享全局变量,多进程不能。 2、多线程中,所有子线程的进程号相同;多进程中,不同的子进程进程号不同。 3、线程共享内存空间;进程的内存是独立的。 4、同一…

docker 安装部署 canal

1 mysql 安装 1.1 拉取镜像 docker pull mysql:8.4.41.2 创建挂载目录 mkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/confmkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/datamkdir -p /user/lzl/tool/docker/mysql/mysql_8.4.4/home/log1.3 编辑配置文…

基于SpringBoot的图书借阅小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

ElasticSearch快速入门--实现分词搜索

分词题目搜索 使用Elasticsearch实现题目数据的存储和分词搜索,需要将数据库的数据同步到 Elasticsearch。 ElasticSearch入门 ElasticSearch(简称ES)是一个开源的分布式搜索和数据分析引擎,用Java开发并且是当前最流行的开源的…

debug - 安装.msi时,为所有用户安装程序

文章目录 debug - 安装.msi时,为所有用户安装程序概述笔记试试在目标.msi后面直接加参数的测试 备注备注END debug - 安装.msi时,为所有用户安装程序 概述 为了测试,装了一个test.msi. 安装时,只有安装路径的选择,没…

Skyeye 云智能制造办公系统 VUE 版本 v3.15.14 发布

Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

深度学习PyTorch之动态计算图可视化 - 使用 torchviz 生成计算图

序号系列文章1深度学习训练中GPU内存管理2深度学习PyTorch之数据加载DataLoader3深度学习 PyTorch 中 18 种数据增强策略与实现4深度学习pytorch之简单方法自定义9类卷积即插即用5深度学习PyTorch之13种模型精度评估公式及调用方法6深度学习pytorch之4种归一化方法(…

ZW3D二次开发_非模板表单_输入框类控件_逐字符回调

ZW3D的非模板表单的控件中有一些输入框类的控件,比如“ZsCc::LineEditBtn”,"ZsCc::LineEditEx"等,按照“ZW3D二次开发_非模板表单_控件_添加回调-CSDN博客”介绍的方法添加函数命令时,发现输入框在用户输入字符时不能动态地触发回…

Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)

四种日志对比总结 日志类型作用记录内容特点常见用途错误日志记录 MySQL 运行过程中的错误、警告及启动、关闭信息MySQL 系统错误、故障信息、警告等较少占用磁盘空间故障排查、系统监控二进制日志记录所有更改数据库数据的操作及事务执行情况DML、DDL 操作,不记录…

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程(software engineering)的影响是全方位且深远的,它不仅改变了传统开发流程,还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度: 一、开发流程的智能化重构 需求工程革命 • …

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus? 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装,选择包管理器 3 运行该命令 demo(案例1 ) 步骤 …

stable diffusion本地安装

1. 基本环境准备 安装conda 环境 pytorch基础学习-CSDN博客 创建虚拟环境: conda create -n sd python3.10 一定要指定用3.10,过高的版本会提示错误: 激活启用环境: conda activate sd 设置pip国内镜像源: pip conf…

使用 Go 构建 MCP Server

一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP(Model Context Protocol,模型上下文协议)是…

Python----计算机视觉处理(Opencv:模板匹配)

一、 概念 模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动 比较,通过某种比较方法来判断是否匹配成功。 二、应用场景 1. 目标检测与识别:在计算机视觉领域&am…

【stm32】用从模式控制器 完成PWM的测量

🌞学习视频还是来自于 铁头山羊 🌿主要是回顾一下他讲的这一章的定时器的部分,具体的话 还是看一下具体铁头山羊的视频,讲的很清楚~~ 整体流程是这样的,首先通过定时器的输出比较功能,配置好PA6产生一个特定…