Hooks 是放置在 hooks 目录中的可执行程序, 以在 git 执行的某些点触发操作. 没有设置可执行位的钩子将被忽略.
Hooks分为客户端和服务端Hooks, 二者路径相同, 均在.git/hooks
目录下. 客户端的Hook只会根据客户端git事件来执行. 同理, 服务端的Hook只会根据远端仓库的git事件来执行. 但是用户clone下来的项目并不会继承远端的hooks程序.
所以, 如果想让某个发生在服务端的事件发生后执行一些操作, 比如每次客户端的push操作被接受后, 向所有人发送邮件, 理想的方式是在远端仓库编写hooks. 但是这里注意, 客户端的hooks并不会同步给其他用户, 所以如果需要每个人在代码被提交前进行必要的检查, 不优雅的做法是针对每个项目都进行一个初始化操作, 当然也可以使用类似Husky这样的工具来避免.
Hooks目录下已经存放了一些xxx.sample
文件, 他们不会被执行, 除非去掉.sample
的后缀, 并且其需要符合git定义的合法命名, 下图就是git的事件名. 这些文件是shell脚本, 也可以在其中执行别的pyhton脚本. 同时需要注意这些脚本的执行权限的问题, 使其至少可被用户或组执行.