需求: 使用Git Hook进行web资源的更新
Git Hook 简介
一般的开发流程都是git add
、git commit
,git push
,钩子呢就是你完成每一步Git给你的“回调”,举个例子假如你想让服务器每次上传完新的代码后更新网站,如果你没有钩子,你只能自己ssh
登录上服务器,自己更新软件,一次两次还好,多了的话你会骂娘的,所以钩子是给我偷懒的脚手架,我们可以很轻松的写一些脚步帮我们完成一些重复的步骤
介绍玩钩子的作用,我们来介绍一下钩子的分类
我们知道Git核心是commit
和push
两个命令,一个对应客户端,一个对应服务端,所以钩子主要分客户端和服务端,由于Git步骤分的很细,所以每个大分类下面还有很多小分类,比如pre-commit
,post-commit
这些。
钩子的全部放在.git/hooks
下面,在新建一个项目仓库的时候,Git已经在这个文件夹下给我们生成了很多个.sample
后缀的钩子,这些钩子只要把.sample
去掉就可以运行了,我们可以在这些sample
上面修改完成我们自己的钩子
客户端钩子
- pre-commit: 执行
git commit
命令时触发,常用于检查代码风格 - prepare-commit-msg:
commit message
编辑器呼起前default commit message
创建后触发,常用于生成默认的标准化的提交说明 - commit-msg: 开发者编写完并确认
commit message
后触发,常用于校验提交说明是否标准 - post-commit: 整个
git commit
完成后触发,常用于邮件通知、提醒 - applypatch-msg: 执行
git am
命令时触发,常用于检查命令提取出来的提交信息是否符合特定格式 - pre-applypatch:
git am
提取出补丁并应用于当前分支后,准备提交前触发,常用于执行测试用例或检查缓冲区代码 - post-applypatch:
git am
提交后触发,常用于通知、或补丁邮件回复(此钩子不能停止git am
过程) - pre-rebase: 执行
git rebase
命令时触发 - post-rewrite: 执行会替换
commit
的命令时触发,比如git rebase
或git commit --amend
- post-checkout: 执行
git checkout
命令成功后触发,可用于生成特定文档,处理大二进制文件等 - post-merge: 成功完成一次
merge
行为后触发 - pre-push: 执行
git push
命令时触发,可用于执行测试用例 - pre-auto-gc: 执行垃圾回收前触发
服务端钩子
- pre-receive: 当服务端收到一个push操作请求时触发,可用于检测push的内容
- update: 与pre-receive相似,但当一次push想更新多个分支时,pre-receive只执行一次,而此钩子会为每一分支都执行一次
- post-receive: 当整个push操作完成时触发,常用于服务侧同步、通知
配置git hook触发,本地客户端更新push触发服务端自动拉取更新资源
1 | cp -a hooks/post-receive.sample hooks/post-receive |
1 | cat hooks/post-receive # vi编辑 |
本地使用
1 | git clone xxxx |
后续走git 流程进行推送,便实现自动更新。
参考资料
- https://github.com/geeeeeeeeek/git-recipes/wiki/5.4-Git-%E9%92%A9%E5%AD%90%EF%BC%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BD%A0%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%B5%81)
- http://blog.zhanglun.me/2017/11/25/%E5%B7%A7%E7%94%A8Git%E9%92%A9%E5%AD%90/)
- https://imweb.io/topic/5b13aa38d4c96b9b1b4c4e9d
- https://www.jianshu.com/p/f9312b51e011