十大最好的网站,邯郸市恒诚网络科技有限公司,网站变黑白代码,广州网站排名优化费用参考链接#xff1a;gitlab git hooks 1. Git Hook 介绍
与许多其他版本控制系统一样#xff0c;Git 有一种方法可以在发生某些重要操作时#xff0c;触发自定义脚本#xff0c;即 Git Hook#xff08;Git 钩子#xff09;。 当我们初始化一个项目之后#xff0c;.git… 参考链接gitlab git hooks 1. Git Hook 介绍
与许多其他版本控制系统一样Git 有一种方法可以在发生某些重要操作时触发自定义脚本即 Git HookGit 钩子。 当我们初始化一个项目之后.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_hooksgitlab-ctl reconfigure2.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 --prettyoneline $oldrev..$newrev)# 遍历每个提交信息while read commit; do# 提取提交信息的前缀prefix$(echo $commit | awk {print $2} | awk -F : {print $1})# 检查前缀是否符合要求if [[ $prefix ! feat $prefix ! fix $prefix ! hotfix ]]; thenecho Error: Invalid commit prefix in one or more commits:echo $commitecho Only commits with prefixes feat, fix, or hotfix are allowed.exit 1fidone $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.sh3. 测试
测试提交 回退commit 再次提交