git钩子
定义:
	  钩子:由事件触发的函数
分类:
	  客户端钩子:由诸如提交和合并这样的操作触发
	  服务器端钩子:由诸如接收被推送的提交这样的联网操作触发
安装:
	  a.钩子都被存储在 .git 目录下的 hooks 子目录中
	  b.当 git init 初始化一个新版本库时,默认会在这个目录中放置一些示例脚本
	  c.任何正确命名的可执行脚本都可以正常使用(Ruby、Python、shell或其它语言)
	  d.这些示例的名字都是以.sample 结尾,如果想启用它们,移除这个后缀就可以了
客户端钩子:
	  提交工作流钩子:
		    pre-commit 钩子在键入提交信息前运行
			      a.用于检查即将提交的快照,例如,检查是否有所遗漏,核查代码,确认提交权限
			      b.如果该钩子以非零值退出,Git 将放弃此次提交
			      c.可以用 git commit --no-verify 来绕过这个环节
			      
		    prepare-commit-msg 钩子在启动提交信息编辑器之前,默认信息被创建之后运行
			      a.入参:存有当前提交信息的文件的路径、提交类型和修补提交的提交的SHA-1校验
			      b.它允许你编辑提交者所看到的默认信息
			      c.对那些会自动产生默认信息的提交可以结合提交模板来使用它,动态地插入信息
    commit-msg 钩子在提交之后运行
			      a.入参:存有当前提交信息的文件的路径
			      b.如果该钩子以非零值退出,Git 将放弃此次提交
			      c.可以在提交通过前验证提交信息
    post-commit 钩子在整个提交过程完成后运行
			      a.不接收任何参数
			      b.通过 git log -1 HEAD 来获得最后一次的提交信息
			      c.一般用于通知之类的事情
  电子邮件工作流钩子:
		    a.电子邮件工作流钩子都是由 git am 命令调用
		    b.如果需要通过电子邮件接收由 git format-patch 产生的补丁,这些钩子也许用得上
    applypatch-msg 钩子 在git am 运行前被调用
			      a.接收单个参数:包含请求合并信息的临时文件的名字
			      b.如果脚本返回非零值,Git 将放弃该补丁
			      c.可以用该脚本来确保提交信息符合格式,或直接用脚本修正格式错误
    pre-applypatch 钩子 在git am 运行期间被调用
			      a.他正好运行于应用补丁之后,产生提交之前,所以可以用它在提交前检查快照
			      b.可以用这个脚本运行测试或检查工作区。 
			      c.如果有什么遗漏,或测试未能通过,脚本以非零值退出,中断 git am 的运行,补丁就不会被提交
    post-applypatch 钩子 运行于提交产生之后
			      a.可以用它把结果通知给一个小组或所拉取的补丁的作者
			      b.但无法用它停止打补丁的过程
  其他钩子:
		    pre-rebase 钩子 变基之前被调用
			      a.以非零值退出可以中止变基的过程
			      b.可以使用这个钩子来禁止对已经推送的提交变基
    post-rewrite 钩子被那些会替换提交记录的命令调用,
			      a.例如git commit --amend 和 git rebase(不包括 git filter-branch)
			      b.它唯一的参数是触发重写的命令名,同时从标准输入中接受一系列重写的提交记录
			      c.用途很大程度上跟 post-checkout 和 post-merge 差不多。
    post-checkout 钩子在 git checkout 成功运行后会被调用
			      a.可以根据你的项目环境用它调整你的工作目录
			      b.例如:放入大的二进制文件、自动生成文档或进行其他类似这样的操作。
    post-merge 钩子在 git merge 成功运行后会被调用
			      a.可以用它恢复 Git 无法跟踪的工作区数据,例如:权限数据。 
			      b.可以用来验证某些在 Git 控制之外的文件是否存在,对这些文件进行处理。
    pre-push 钩子在 git push 之前调用。 
			      a.它接受远程分支的名字和位置作为参数,同时从标准输入中读取一系列待更新的引用
			      b.可以在推送开始之前,用它验证对引用的更新操作
			      c.一个非零的退出码将终止推送过程
    pre-auto-gc 钩子会在垃圾回收开始之前被调用
			      a.git的一些日常操作在运行时,偶尔会调用 git gc --auto 进行垃圾回收。 
			      b.可以用它来提醒你现在要回收垃圾了,或者依情形判断是否要中断回收。
说明:克隆某个版本库时,它的客户端钩子 并不 随同复制。 如果需要靠这些脚本来强制维持某种策略,可以在服务器端实现这一功能
服务器端钩子:
	  pre-receive 处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive
		    a.它从标准输入获取一系列被推送的引用。
		    b.如果它以非零值退出,所有的推送内容都不会被接受
		    c.可以用这个钩子阻止对引用进行非快进(non-fast-forward)的更新
    d.可以对该推送所修改的所有引用和文件进行访问控制。
  update
		    a.update 脚本和 pre-receive 脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次
		    b.假如同时向多个分支推送内容,pre-receive 只运行一次,update 会每一个被推送的分支运行一次
		    c.接受三个参数:引用的名字(分支),推送前引用指向的SHA-1值,推送内容的SHA-1值
		    d.如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。
  post-receive 在整个过程完结以后运行
		    a.可以用来更新其他系统服务或者通知用户,例如:给某个邮件列表发信,通知持续集成的服务器
		    b.该脚本无法终止推送进程
		    c.不过客户端在它结束运行之前将保持连接状态
git钩子的更多相关文章
- Git 钩子
		
1. 概念概述 1.1. 安装钩子 1.2. 脚本语言 1.3. 钩子的作用域 2. 本地钩子 2.1. 预提交钩子 Pre-Commit 2.2. 准备提交信息钩子 Prepare Commit M ...
 - Git钩子详解
		
钩子 Git钩子是在Git仓库中特定事件发生时自动运行的脚本.可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子.Client端钩子被operation ...
 - Git钩子:自定义你的工作流
		
Git钩子是在Git仓库中特定事件发生时自动运行的脚本.它可以让你自定义Git内部的行为,在开发周期中的关键点触发自定义的行为. Git钩子最常见的使用场景包括推行提交规范,根据仓库状态改变项目环境, ...
 - (Git 钩子)自定义你的工作流 和引用日志
		
Git 钩子是在 Git 仓库中特定事件发生时自动运行的脚本.它可以让你自定义 Git 内部的行为,在开发周期中的关键点触发自定义的行为. Git 钩子最常见的使用场景包括推行提交规范,根据仓库状态改 ...
 - Git钩子设置自动构建Jenkins
		
打开Git仓库,找到对应的项目,点击“仓库设置”,左侧点击“管理Git钩子”,如下图所示: 因为是push之后触发自动构建的,选择“post-receive”进行编辑 #!/bin/bash #提取分 ...
 - [转] 利用git钩子,使用python语言获取提交的文件列表
		
项目有个需求,需要获取push到远程版本库的文件列表,并对文件进行特定分析.很自然的想到,要利用git钩子来触发一个脚本,实现获取文件列表的功能.比较着急使用该功能,就用python配合一些git命令 ...
 - 利用Git钩子实现代码发布
		
目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...
 - Gogs 设置Git钩子实现项目自动部署
		
每次修改代码需要上传到 git仓库,查看了一下 Gogs 使用文档 发现有 web钩子 这个选项,然后发现了本地可实现的 Git钩子. 注意:需要用到管理员帐号登录,进行仓库的设置. 有三种状态分别是 ...
 - Vue+ESLint+Git钩子函数pre-commit配置教程
		
一.创建Vue项目eslint-standard vue create eslint-standard 二.创建.eslintrc.* 删除package.json中的eslintConfig配置 我 ...
 - 用 git 钩子,检测代码规范性(eslint、standard)
		
最终实现效果说明:用 git commit 提交代码之前,利用 pre-commit git 钩子,实现代码规范检测(eslint.standard 规范),符合规范之后才可以提交到 git 仓库.这 ...
 
随机推荐
- Sql Server2005 Synonyms
			
1. 同义词(SYNONYM)是SQL Server 2005中新特性 它是一种对已有的或潜在的新对象给予的别名.可以在同一个数据库或者跨数据中中使用这个别名,这个别名替代了原有对象.可以建别名的对象 ...
 - asp.net core mvc视频A:笔记6-1.应用发布与部署
			
显示:直接使用上节课的项目 一.使用vs发布应用 这里选择发布到文件夹,当然你可以选择其他的发布方式 部署模式:(我的VS里没有这个配置,不知道为啥...视频里有) 1.框架依赖:选择此模式,发布后需 ...
 - JanusGraph与Cassandra集成模式
			
//如果使用的是cassandra 2.2或更高版本,需要开启thift,以使janus连接到cassandra. ./bin/nodetool enablethrift. 15.1 Local Se ...
 - unity, 弹出panel一定要放在UI Hierarchy的底端
			
如上图,buyPanel放在最底端,为的是它弹出时屏蔽所有其它UI的消息.
 - UI-2-UILabel&UIImageView-补充
			
课程要点: 控件之间的继承关系. UILabel UIImageView 利用UIImageView实现帧动画 补充 试图之间的继承关系 昨天学习UIView的时候,了解到UIView里面有以下几个常 ...
 - 模式识别 - libsvm的函数调用方法 具体解释
			
libsvm的函数调用方法 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM的 ...
 - Mybatis结果生成键值对
			
在实际应用中我们经常会遇到这样的情况,需要给下拉框赋值,这个时候就需要键值对了,具体使用方法如下 1,在maper.xml文件中定义结果类型(resultType)定义为hashmap,如下所示 &l ...
 - IE的坏脾气——3像素Bug
			
在一个典型的浮动中,如下面的图片所示:灰色矩形是外部容器,绿色容器在外部容器内向左浮动,未浮动的部分包围着浮动部分.但是IE6在解析这样的浮动时,会莫名的给靠紧浮动部分的未浮动部分添加3个像素的边距. ...
 - Spring入门之AOP篇
			
听了几节IT黑马营的SPRING课程,照着例程写了一个SPRING 中AOP的例子: 一.准备工作 下载复制或配置JAR包.图方便,我将下载的SPRING包都加上去了.另外还需要aspectj的两个 ...
 - poj 2125(最小割)
			
题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...