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

如何在gitlab上使用hooks

参考链接:gitlab git hooks

1. Git Hook 介绍

与许多其他版本控制系统一样,Git 有一种方法可以在发生某些重要操作时,触发自定义脚本,即 Git Hook(Git 钩子)。
在这里插入图片描述
当我们初始化一个项目之后,.git 目录下有一个 hooks 目录,可以看到上图左侧有很多执行任务,比如 pre-commit,代表在运行这些命令之后或之前,会进行一些校验和检测来执行相应任务。
Git Hook 分为两部分:本地和远程,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传本地 Git Hook,由提交和合并等操作触发:

  • 比如代码发生变更,进行 git add,把 message 进行 commit changes;
  • 当 git commit 时,就会执行一个钩子叫 pre-commit(准备提交钩子)。

远程 Git Hook,运行在网络操作上,例如接收推送的提交:

  • 在 commit 之后,要推送到远端,此时有一个叫 pre-push 钩子,把信息推送 git 仓库;
  • 在远程阶段,极狐GitLab 相当于一个远程仓库。如图有很多仓库,分别承担不同功能,比如 pre-receive ,主要在服务器端接收通过本地推上来代码,然后 update 相关代码,post-receive 说明代码接受成功,同时有一个服务器钩子执行。

在这里,我们主要关注本地 hook,比如说 pre-message 和 pre-push,因此我们会借助这些工具来实现规范化代码内容。

2. 实战操作

2.1 gitlab配置

参考git hooks

gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
gitlab-ctl reconfigure

2.2 编写脚本

功能说明:对git的commit信息的前缀做限制

mkdir -p /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/

cat /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive.sh

#!/bin/bash
while read oldrev newrev refname; do
    # 从标准输入读取每个引用的旧版本、新版本和引用名称
    commits=$(git rev-list --pretty=oneline $oldrev..$newrev)
    # 遍历每个提交信息
    while read commit; do
        # 提取提交信息的前缀
        prefix=$(echo "$commit" | awk '{print $2}' | awk -F ":" '{print $1}')
        # 检查前缀是否符合要求
        if [[ $prefix != "feat" && $prefix != "fix" && $prefix != "hotfix" ]]; then
            echo "Error: Invalid commit prefix in one or more commits:"
            echo "$commit"
            echo "Only commits with prefixes 'feat', 'fix', or 'hotfix' are allowed."
            exit 1
        fi
    done <<< "$commits"
done

给脚本权限,重启gitlab

chown -R git.root /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d
chmod +x git.root /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive.sh

3. 测试

测试提交
在这里插入图片描述
回退commit
在这里插入图片描述
再次提交
在这里插入图片描述


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

相关文章:

  • 源码分析Spring Boot (v3.3.0)
  • 【概率统计通俗版】极大似然估计
  • 保存数据到Oracle时报错ORA-17004: 列类型无效: 1111
  • 2024年11月19日随笔
  • mysql bin log分析
  • leetcode 扫描线专题 06-leetcode.836 rectangle-overlap 力扣.836 矩形重叠
  • Android 相机库CameraView源码解析 (二) : 拍照
  • 深入理解MySQL索引及事务
  • python小数据分析小结及算法实践集锦
  • 后端接口返回二进制流音频数据,前端 js 如何播放?
  • 【源码】医院安全(不良)事件管理系统,11种不良事件类型,覆盖全院全部科室及所有可能发生的不良事件
  • 【nlp】3.3 Transformer论文复现:2. 编码器部分(掩码张量、多头注意力机制、前馈全连接层)
  • 给pycharm项目设置conda环境
  • Edit And Resend测试接口工具(浏览器上的Postman)
  • python+gurobi求解线性规划、整数规划、0-1规划
  • C#-关于日志的功能扩展
  • Linux的基本指令(四)
  • SpringBoot应用手册
  • docker启动容器失败,然后查看日志,docker logs查看容器出现报错:
  • 【Spring Boot】Swagger的常用注解
  • 评测|PolarDB MySQL 版 Serverless
  • 【Axure高保真原型】3D金字塔图_移入显示数据标签
  • C++ 文件和流、异常处理、动态内存、预处理器
  • 嵌入式设备视频编码比较:H.264、H.265、MPEG-2和MJPG
  • Feign接口请求返回异常 no suitable HttpMessageConvert found for response type
  • 卷积神经网络(CNN)车牌识别