hook功能
hook是什么
git hooks
是git
提供的,在发生特定事件时,允许用户添加自定义代码(或操作)的方式。
就像Vue
中组件的生命周期钩子,比如,你想在vue
组件创建后输出一行log
, 你可能会这么写
有什么用?
规范commit提交:比如git commit -m "test: 修复bug2"
时,很规范,但是团队中有人只写一个git commit -m "add"
,则不符合规范,此时就可以使用commit-msg
钩子去限定下,提交信息必须符合某种格式,否则不允许提交- 你喜欢
js
代码缩进用两个空格,但是团队中有人总是两个空格和四个空格混用,十分的混乱,这时候就可以结合eslint
,在提交前进行代码格式的校验
如何创建一个hook
hook脚本放在哪里
在/.git/hooks文件夹下面,git
在初始化仓库的时候,很贴心的为你初始化了很多个xxx.sample
文件(这些文件不会被执行),就是钩子的示例文件,比如pre-commit.sample
就是git commit
前的钩子示例文件。
创建一个pre-commit的hook
将pre-commit.sample复制一份去掉后缀
#!/bin/sh
#以下为shell语法
echo "Hello world"
效果如下:
hook可以使用什么语言
用于编写 git hooks
的脚本语言是没有限制的,可以用 nodejs
、shell
、python
、ruby
等脚本语言,非常的灵活方便
python脚本写hook示例
要点:python 脚本的位置放在hooks文件夹下,脚本名字不要后缀比如:“pre-commit”
import subprocess
print ("begin py:")
# 获得git commit 日志
user = subprocess.Popen("git config --global user.name", stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
email = subprocess.Popen("git config --global user.email", stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
user = user.communicate()[0]
email = email.communicate()[0]
print("current user: %s: %s" % (user, email))