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

目录

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

1.1 是个啥

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

2. 怎么创建一个 git hooks ?

2.1 首先看git hooks存在哪里

2.2 创建一个pre-commit钩子

2.3 触发钩子

3 有用点的实战

4 总结

5 其他

5.1 如果在mac下报以下异常

5.2 常用钩子

5.3 hooks可以使用什么语言?

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 文件内容

node版

#!/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创建使用的资料请关注易知道(ezd.cc)其它相关文章!

推荐阅读

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    git权限设置|git用户权限

    git权限设置|git用户权限,,1. git用户权限1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。也就是说自己机器上有一个git仓库

    git pull 指定某一个文件或文件夹

    git pull 指定某一个文件或文件夹,文件,版本,1、要解决的问题 默认情况下,git pull 操作会把远程仓库的所有最新数据更新到本地。但是,如果

    GitHub网页版指南

    GitHub网页版指南,分支,你的,什么是GitHub 步骤一创建仓库 步骤二打开Issue 步骤三创建分支 步骤四提交 步骤五上推

    GitHub从fork到pull request之基础流程

    GitHub从fork到pull request之基础流程,分支,远端, 之前接触了github,但每次使用都还要查阅一些基础用法,因此打算在此总结回顾一下。

    hbuilderx如何安装GIT插件 hbuilderx安装GIT插件教程【详解】

    hbuilderx如何安装GIT插件 hbuilderx安装GIT插件教程【详解】,插件,安装,教程,小伙伴,更多,在这,  很多小伙伴在使用hbuilderx的时候,想知道怎

    理光GRDIGITALII怎么样

    理光GRDIGITALII怎么样,外壳,按键,手感,设置,显示,闪光,  理光GRDIGITALII整体黑色的外观,机身质感明显的磨砂涂层,扎实的镁合金外壳,厚实的橡胶

    fatal: “Could not read remote” -- Mac下使用Git Push显示权限错误

    fatal: “Could not read remote” -- Mac下使用Git Push显示权限错误,终端,我的,我昨天在提交项目的时候遇到了这个问题:在终端输入git pu

    svn 及 git patch 文件

    svn 及 git patch 文件,文件,可以用,项目开发中经常会遇到A同事编写的代码需要B同事review,然后由C同事提交,patch文件是一种很好的代码传递

    怎么安装Git并配置SSH?(教程)

    怎么安装Git并配置SSH?(教程),密钥,安装,配置,输入,命令,密码,Git是一款非常强大的版本控制工具,它简单易用、功能强大,广泛用于软件开发、项目管理

    详细介绍Git的提交步骤

    详细介绍Git的提交步骤,提交,更改,文件,修改,命令,步骤,随着软件开发和团队协作越来越普及,Git作为分布式版本控制系统,已经成为了几乎所有开发团