Git Hooks

Hook可以在版本库提交,补丁等去构建一个,或多个脚本。一个事件可以分解很多步骤,用脚本控制发生的事…

比如,git commit -m “xxxx” 这一步会触发钩子,检测它的commit message是否遵循规则等等….  提交和创建分枝可以用钩子检测是否规范等,了解Hook是必不可缺的

一. 钩子介绍

1.2种钩子

  • 客户端钩子
  • 服务端钩子

2.hook存在.git/hooks中是单独存在,不会随clone复制,所以团队使用的时候要复制.git/hooks来使用(git clone, git fetch不能复制钩子)

3.钩子2种

  • 前置pre:钩子在动作前触发(进行检测,批准等)
  • 后置post:钩子在动作后触发(如发邮件通知,关闭bug)

4. exit 0 成功状态退出,exit 1 (非0)失败状态退出

5.使用钩子会变慢?思考5分钟 如果一个坏的钩子会严重影响工作效率,应立马禁止

6.钩子不会自动复制,处于安全。另一个原因是Git没有机制去复制出了Blob,树和提交之外的任何东西

7.获取帮助git help hooks


二.安装钩子

1.每个钩子都是脚本,版本库的钩子都集合在.git/hooks目录下

2.每个钩子都是关联的事件来命名,比如: 在git commit操作前执行的钩子是.git/hooks/pre-commit

3.每个钩子必须遵循UNIX脚本基本规范,必须是可执行的(chmod u+x .git/hooks/pre-commit)这里如果对权限不理解可以看这遍文章《User,File权限管理》, 同时必须在首行改脚本语言解释(如:#!/bin/bash 或#!/bin/perl)

4.钩子必须有正确名字和授权可执行权限

5.创建钩子的时候会自动复制到Git目录下,例如:在Debian和Ubuntu系统中,钩子自动复制/user/share/git-core/templates/hooks

6.钩子自动创建,但默认都是禁止的。如果开启后要禁止  a)可以移除可执行权限   b)或者在.git/hooks/xx 指定的脚本添加 .sample后缀禁止

7.启动钩子直接移除文件.sample后缀(mv .git/hooks/pre-commit.sample .git/hooks/pre-commit),并且具有可执行权限(chmod u+x .git/hooks/pre-commit)

8.关闭指定钩子在7的逻辑上是一样的,直接删除不带.sample或别的后缀文件(pre-commit)或者取消执行权限(chmod a-x .git/hooks/pre-commit)

9.关闭所有钩子直接 rm .git/hooks/* (删了所有的hook)

9.windows中默认是可执行的


三.提交相关

1.git rebase,git mergegit am都默认不执行提交钩子(会执行别的),git commit –amend会执行git 钩子

2.与提交相关的4个钩子

  • pre-commit:它会在用户能够编辑提交消息之前执行,所以用户不用输入信息后才发现拒绝了。如:它可以自动修改提交的内容
  • pre-commit-msg:它让你在Git的默认消息展示给用户之前做出修改。如:修改默认的提交模版
  • commit-msg:它能在用户编辑后验证或修改提交的消息。如:拼写检查或拒绝不规范消息
  • post-commit:它在提交操作完成后执行。如:此时可以发邮件,自动构建,更新日志,自己标题bug修复(#bug号匹配)。它很少用,在git commit时很少会和人共享(update更合适)

续写…..

 

 

发表回复

电子邮件地址不会被公开。 必填项已用*标注