iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >git hooks的作用及创建使用示例详解
  • 250
分享到

git hooks的作用及创建使用示例详解

2024-04-02 19:04:59 250人浏览 独家记忆
摘要

目录1. 什么是git hooks ?有什么用啊?1.1 是个啥1.2 有啥用?我以前没用过它不也一样好好的吗?我干嘛要用它?2. 怎么创建一个 git hooks ?2.1 首先看

1. 什么是git hooks ?有什么用啊?

1.1 是个啥

git大家都在用吧,相信现在没公司代码不做版本控制的吧。git hooksgit提供的,在发生特定事件时,允许用户添加自定义代码(或操作)的方式。

就像Vue中组件的生命周期钩子,比如,你想在vue组件创建后输出一行log, 你可能会这么写

export default {
    created () {
        console.log('Hello I am created.')
    }
}

1.2 有啥用?我以前没用过它不也一样好好的吗?我干嘛要用它?

  • 你在git commit -m "feat: 修复bug=51234"时,总是提交的很规范,很明确自己提交了什么,但是团队中有人提交时只写一个git commit -m "add",你也看不出来他提交了啥,这时候就可以使用commit-msg钩子去限定下,提交信息必须符合某种格式,否则不允许提交
  • 你喜欢js代码缩进用两个空格,但是团队中有人总是两个空格和四个空格混用,十分的混乱,这时候就可以结合eslint,在提交前进行代码格式的校验

2. 怎么创建一个 git hooks ?

2.1 首先看git hooks存在哪里

git hooks其实就存在仓库根目录中的.git/hooks/目录中(.git目录可能是隐藏目录,取消隐藏即可查看),我们来看下默认的.git/hooks/目录是什么样子

发现了吗,git在初始化仓库的时候,很贴心的为你初始化了很多个xxx.sample文件(这些文件不会被执行),就是钩子的示例文件,比如pre-commit.sample就是git commit前的钩子示例文件。

2.2 创建一个pre-commit钩子

为了更容易理解,让我们设定一个场景:比如,你想在git commit 前在命令行输出一个 Hello world

.git/hooks/中将pre-commit.sample文件复制一份,删除文件后缀名,文件名变为pre-commit,删除除第一行以外的内容

#!/bin/sh
# 以下为shell语法
echo "Hello world"

2.3 触发钩子

我们刚刚创建的是提交前的钩子,那么我们要触发它,就必须得提交代码(即执行git commit

在根目录中创建一个文件 1.js

var a = 12

创建后目录结构

study
├── .git
│   ├── hooks
│   │   ├── pre-commit
└── 1.js

添加进暂存区

git add .

提交

git commit -m "我新建了一个1.js"

此时命令行输出

你看上面打出了 "Hello world",哟呼,我们创建了自己的第一个git hooks,给自己点个赞!!!!

3 有用点的实战

需求场景

假设,我们不允许在提交信息中包含"大白"这种词汇,那么我们可以怎么做?

在.git/hooks 中新建commit-msg文件, 编写 .git/hooks/commit-msg 文件内容

#!/usr/bin/env node
const fs = require('fs');
// 索引 2 对应的 commit 消息文件 里面包含提交信息
// 就是你在 git commit -m "msg" 时输入的 msg
const msg = fs.readFileSync(process.argv[2], 'utf-8').trim();
// 判断 commit_msg中是否包含 "大白"
// 若包含,则中断git的流程
if (msg.indexOf('大白') > -1) {
  console.error('您的提交信息中包含【大白】这个词汇,请检查!');
  // exit 1 表示程序执行异常退出 中断git的流程 不允许提交
  process.exit(1);
} else {
    console.log('不包含')
}
  • shell 版
#!/bin/sh
# 获取当前提交的 commit msg 内容
# 就是你在 git commit -m "msg" 时输入的 msg
# 用 `` 可以将命令的输出结果赋值给变量 commit_msg
# $1 是git在执行钩子时提供给我们的参数,就是你在 git commit -m "msg" 时输入的 msg
commit_msg=`cat $1`
# 输出下获取到的提交注释
echo "您提交的commit_msg: $commit_msg"
# 判断 commit_msg中是否包含 "大白"
# 若包含,则中断git的流程
if [[ $commit_msg =~ "大白" ]]
then
  echo "您的提交信息中包含【大白】这个词汇,请检查!"
  # exit 1 表示程序执行异常退出 中断git的流程 不允许提交
  exit 1
else
  echo "不包含"
fi

修改 1.js

var a = 12333

添加进暂存区

git add .

提交

git commit -m "我新建了一个1.js,大白"

运行结果

4 总结

其实就是git就是在用户做特定事情的时候,去查找.git/hooks/,目录中查找对应事件的钩子文件是否存在,若存在就执行这个钩子文件中的shell脚本(上面的例子中就是git在用户执行git commit操作的时候,找到了pre-commit文件并执行了其中的shell

5 其他

5.1 如果在mac下报以下异常

hint: The ‘.git/hooks/pre-auto-GC’ hook was ignored because it’s not set as executable.
hint: You can disable this warning with git config advice.ignoredHook false.

那是因为在mac下文件默认是不可执行的,执行以下操作即可

chmod 777 .git/hooks/commit-msg

5.2 常用钩子

pre-commit 提交前
commit-msg 提交信息
pre-push push前

更多文档请参看点我去官网看

5.3 hooks可以使用什么语言?

用于编写 git hooks 的脚本语言是没有限制的,你可以用 nodejsshellpythonruby等脚本语言,非常的灵活方便。文中我使用的是shell

以上就是git hooks的作用及创建使用示例详解的详细内容,更多关于git hooks创建使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: git hooks的作用及创建使用示例详解

本文链接: https://www.lsjlt.com/news/165769.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • git hooks的作用及创建使用示例详解
    目录1. 什么是git hooks ?有什么用啊?1.1 是个啥1.2 有啥用?我以前没用过它不也一样好好的吗?我干嘛要用它?2. 怎么创建一个 git hooks ?2.1 首先看...
    99+
    2024-04-02
  • LongAdder原理及创建使用示例详解
    目录LongAdder介绍1.Atomic原子类2.LongAdder原理2.查看LongAdder的add方法3.longAccumulate方法3.1.创建Cell数组3.2.创...
    99+
    2023-01-13
    LongAdder创建使用 LongAdder创建
  • Hooks封装与使用示例详解
    目录Hooks是什么?Hooks解决了什么?HOC与HOOK对比分别使用React与Vue3两种框架封装useThrottle钩子函数总结Hooks是什么? 本篇文章主要介绍Hook...
    99+
    2023-01-04
    Hooks封装使用 Hooks封装
  • 使用OpenGL创建窗口的示例详解
    目录效果展示窗口创建并启动渲染循环效果展示 窗口创建并启动渲染循环 #include <glad/glad.h> #include <GLFW/glfw3.h...
    99+
    2024-04-02
  • 静态pod创建使用示例详解
    目录一.系统环境二.前言三.静态pod3.1 何为静态pod3.2 创建静态pod3.2.1 使用--pod-manifest-path指定静态pod目录3.2.2 静态pod默认目...
    99+
    2022-11-13
    静态pod创建使用 静态pod
  • GO文件创建及读写操作示例详解
    目录三种文件操作比较ioutilioutil.ReadFile读ioutil.WriteFile 写ioutil.ReadAll 读ioutil.ReadDir 查看路径下目录信息i...
    99+
    2024-04-02
  • 使用 React Hooks 重构类组件的示例详解
    目录1. 管理和更新组件状态2. 状态更新后的操作3. 获取数据4. 卸载组件时清理副作用5.  防止组件重新渲染6. Context API7. 跨重新渲染保留值8. 如...
    99+
    2024-04-02
  • Java读写锁ReadWriteLock的创建使用及测试分析示例详解
    目录简介基本方法介绍创建读写锁使用读锁readLock().lock()使用读锁readLock().tryLock();readLock().tryLock(6L, TimeUni...
    99+
    2023-01-12
    Java读写锁ReadWriteLock Java ReadWriteLock
  • hooks中useEffect()使用案例详解
    常见使用: 获取数据案例: import React, { useState, useEffect } from 'react'; import axios from 'axios'...
    99+
    2024-04-02
  • python Fabric使用详解及示例
    abric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行、文件上传、下载及完整执行日志输出等功能。Fabric在Paramik...
    99+
    2023-01-31
    示例 详解 python
  • C#泛型的使用及示例详解
    目录一、什么是泛型二、为什么使用泛型三、泛型类型参数四、泛型类五、泛型约束六、泛型的协变和逆变七、泛型缓存这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框...
    99+
    2024-04-02
  • Android Git submodule详解用法示例
    目录引入创建 submodule本地配置代码提交主项目上的代码提交submodule独立项目上的代码提交删除 submodule引入 假定我们有两个项目:Cup 和 Water,其中...
    99+
    2024-04-02
  • 使用Python和scikit-learn创建混淆矩阵的示例详解
    目录一、混淆矩阵概述1、示例12、示例2二、使用Scikit-learn 创建混淆矩阵1、相应软件包2、生成示例数据集3、训练一个SVM4、生成混淆矩阵5、可视化边界一、混淆矩阵概述...
    99+
    2024-04-02
  • telnet命令详解及使用示例
           telnet 是一种用于远程访问和管理计算机网络设备、服务器和服务的协议和命令行工具。它可以用于连接到运行 Telnet 服务器软件的任何计算机,并在远程计算机上执行命令和操作。以下是 telnet 命令的详细解释和使用示例。...
    99+
    2023-08-31
    linux 服务器 运维
  • +=在C语言中的作用及示例详解
    +=运算符在c语言中是一个复合赋值运算符,它将变量的值与其自身加上一个给定值相加,从而修改变量的值。使用方法:将变量 += 常量/变量/表达式;,其中变量是可以修改的值,常量是不可修改的...
    99+
    2024-04-03
    c语言 += 编译错误
  • vue3自定义插件的作用场景及使用示例详解
    目录插件的作用场景插件的定义(注册)插件的安装插件的使用插件中的Provide/inject插件的作用场景 在vue2的插件那篇文章我们介绍过插件其实就是vue的增强功能。通常来为...
    99+
    2023-02-23
    vue3自定义插件 vue 插件
  • python创建模板文件及使用教程示例
    目录写作思路1、模板的定义2、如何利用模板生成多个文件运行结果写作思路 1、模板的定义 2、如何利用模板生成多个文件 在很多情况下,我们会创建出很多样式相似甚至是相同的类文件,比如在...
    99+
    2024-04-02
  • docker容器的创建及常用操作命令详解
    目录docker容器简介1、创建容器2、查看本机的容器列表3、停止和启动一个容器4、删除容器5、查看容器内容6、复制命令7、进入容器docker容器简介 容器就是对外提供服务的一个实...
    99+
    2024-04-02
  • go操作Kafka使用示例详解
    目录1. Kafka介绍1.1 Kafka是什么1.2 Kafka的特点1.3 常用的场景1.4 Kafka中包含以下基础概念1.5 消息1.6 消息格式2. Kafka深层介绍2....
    99+
    2022-12-08
    go操作Kfaka go Kfaka
  • 利用Python创建位置生成器的示例详解
    目录介绍开始步骤创建训练数据集创建测试数据集将合成图像转换回坐标放在一起结论介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作