如何在gitlab上使用hooks

news2024/11/29 2:38:18

参考链接: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.coloradmin.cn/o/1256499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习库:numpy

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 写在开头 基本数据格式 array 数据定位 argmax 数据生成 random.rand random.randn random.randint 维度拓展 expand_dim 结语 写在…

MutationObserver 监视 DOM 树改变的api

1、介绍 MutationObserver是一个构造函数&#xff0c;可以用来监听某个节点的变化&#xff0c;当节点发生变化时&#xff0c;可以执行一些回调函数。 它不会立即执行&#xff0c;需要调用MutationObserver的observe方法&#xff0c;传入你想要监听的节点&#xff0c;以及一些配…

Proteus仿真--基于ADC0832的可调频率波形输出

本文介绍基于ADC0832的可调频率波形输出&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中80C51单片机作为主控&#xff0c;用数码管作为显示模块&#xff0c;频率采集选用ADC0832芯片 仿真运行视频 Proteus仿真--基于ADC0832的可调频率波形输出…

专业级音乐制作软件Studio One 6.5详细功能介绍

Studio One 6.5是一款专业级音乐制作软件&#xff0c;由PreSonus公司开发。它提供了强大的音频录制、编辑、混音和制作工具&#xff0c;被广泛应用于音乐制作、录音棚和现场演出等领域。 Studio One-6.5 下载地址&#xff1a;https://souurl.cn/fMjY4Q 下面是关于Studio One 6…

【刷题笔记】接雨水||暴力通过||符合思维方式

接雨水 文章目录 接雨水1 题目描述2 分析2.1 左到右2.2 右到左2.3 计算面积 3 代码3.1 Java3.2 Python 附录1 1 题目描述 https://leetcode.cn/problems/trapping-rain-water/ 面试的时候关键不是你的手法多么精妙&#xff0c;首先要做出来。 给定 n 个非负整数表示每个宽度为…

Redis之C语言底层数据结构笔记

目录 动态字符串SDS Dict ZipList QuickList ​ SkipList 动态字符串SDS Dict ZipList QuickList SkipList

汇编实验2-2 查找匹配字符串笔记

一、数据段 1.字符串结尾&#xff1a;13,10&#xff0c;$ 2.设置格式控制字符串(这样就不用再写clrf函数了) 3.设置存关键字和句子的地址标签&#xff0c;以关键字为例 二、代码段 1.输入字符串 2.字符串比较 2.1 每次的比较长度&#xff0c;KLEN->CL 2.2 设置目标串起始…

代码随想录算法训练营第五十九天|503. 下一个更大元素 II、42. 接雨水

第十章 单调栈part02 503. 下一个更大元素 II 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之…

应用程序安装异常(-113)

应用程序安装异常(-113) 报错如下&#xff1a;    应用未安装:应用与您的手机不兼容。    应用程序安装异常(-113)    这种情况是说我们的是x86架构&#xff0c;但是你运行的项目支持的是arm架构&#xff0c;所以你需要让自己的项目也支持arm的架构。 方案一 在项目的…

【Seata源码学习 】篇五 注册分支事务

【Seata源码学习 】篇五 分支事务注册 1.远程服务调用绑定XID 回到事务模版方法类TransactionalTemplate中 beginTransaction(txInfo, tx);Object rs;try {// Do Your Business// 执行执行拦截器链路rs business.execute();} catch (Throwable ex) {// 3. The needed busine…

人力资源管理后台 === 上传+权限数据

目录 1.员工详情-封装员工头像组件 2.员工详情-上传图片-创建腾讯云存储桶 3.员工详情-使用cos-sdk完成上传 4. 权限管理-搭建权限页面 5.权限管理-获取数据转化树形 6.权限管理-作业 7.权限应用-权限概念 8.权限应用-员工分配角色-弹出层 9.权限应用-员工分配角色-回…

运维 | 浅谈云计算的相关概念和分类

关注&#xff1a;CodingTechWork 云计算 云计算的出现 云计算是采用的按需付费的方式&#xff0c;通过互联网访问云服务器上的服务器、数据库等服务。云计算为何会出现&#xff1f;  如果现在一个企业想要进行软件管理部署&#xff0c;首先需要服务器主机和网络规划&#…

自建CA实战之 《0x01 Nginx 配置 https单向认证》

自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;&#xff0c;本篇文章我们将介…

OSG粒子系统与阴影 - ​​​​​​​粒子系统的读取与保存(6)

粒子系统的读取与保存 在前面的章节中&#xff0c;已经讲到了所有的粒子系统的基本使用方法和自定义粒子系统的方法。有时需要把一个好的粒子系统保存起来&#xff0c;方便以后使用。保存粒子系统可以通过简单地调用 osgDB::writeNodeFile()来完成&#xff0c;如果直接读取并加…

高性能Mysql第三版(一)

学习目标&#xff1a; 高性能Mysql第3版 学习内容&#xff1a; MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 文章目录 学习目标&#xff1a;高性能Mysql第3版 学习内容&#xff1a;1 Mysql逻辑架构1.1 My…

【STM32单片机】贪吃蛇游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用8*8LED点阵模块、矩阵按键、蜂鸣器模块等。 主要功能&#xff1a; 系统运行后&#xff0c;贪吃蛇游戏开始运行&#xff0c;默认蛇身为2节&#xff…

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

【数据结构初阶】树,二叉树

树&#xff0c;二叉树 1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构 1.树概念及结构 1.…

计算机视觉算法——基于Transformer的目标检测(DN DETR / DINO / Sparser DETR / Lite DETR)

计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09; 计算机视觉算法——基于Transformer的目标检测&#xff08;DN DETR / DINO&#xff09;1. DN DETR1.1 Stablize Hungarian Matching1.2 Denoising1.3 Attention Mask 2. DINO2.1 Contrasti…

Map和Set小总结【温习】

目录 一、概念与模型 二、Map的使用 三、Set的说明 一些小练习 四、哈希表 1.概念 2.冲突 2.1、概念 2.2、冲突-->避免 2.3、冲突-->解决 &#xff08;1&#xff09;闭散列 &#xff08;2&#xff09;开散列 2.4、其他问题 一、概念与模型 1.概念&#xff1a…