git hooks探索(1)
git hooks是由特定事件触发,可以在事件发生之前、之时或者之后调用用户通过hooks自定义的操作。通过git hooks能够配置一系列动作,例如,每次提交代码之后,能够自动进行代码编译和部署操作。这仅仅是举一个很简单的例子,希望起到抛砖引玉的作用,能够通过git hooks实现更多的功能。默认情况下,hooks脚本文件都使用的bash shell语言,当前平时在linux系统中使用的脚本语言都能够在此脚本文件中使用,例如python、perl甚至ruby。本文中仍然使用bash shell完成所有实验内容。
hooks脚本目录
git目录的初始化是在项目目录下直接执行不带任何参数的“git init”命令,结果是在项目目录下面生成“.git”目录。如果使用带参数的命令“git init --bare”,那么会将所有git相关的文件和目录直接添加在当前目录下,也就是说,此目录仅用于保存元数据与对象数据库的地方,无法查看项目源码文件。二者生成的文件和目录的内容完全一样,只是使用环境稍微有些区别,前者是在客户端开发者本地将已经存在的项目添加到git中,而后者是在git服务端代码库中新建一个项目时使用。因此,git hooks的相关事件也可以分为在客户端和服务端两类,当然实现机制完全一样,只是由于环境的变化,所需实现的功能侧重点有所不同。
git目录下包含程序所需要的所有目录和文件,内容如下所示:“branches/ hooks/ info/ logs/ objects/ refs/ COMMIT_EDITMSG config description HEAD index”,其中前六个为目录,后五个为文件名称。其中第二个目录“hooks”为git hooks的脚本所在目录。
自动生成的hooks目录下包含一些参考脚本文件,当然还有很多没有给出参考脚本的hooks事件,在git version 2.5.0版本下其自动生成的脚本文件如下所示:
applypatch-msg.sample
post-update.sample
pre-commit.sample
pre-push.sample
update.sample
commit-msg.sample
pre-applypatch.sample
prepare-commit-msg.sample
pre-rebase.sample
默认情况下,这些脚本都是不起所用的。如果需要让这些脚本文件起作用,那么直接将脚本文件名称中的“.sample”扩展名去掉即可。
发表评论: