git hooks

Posted in development on December 31, 2020 by Adrian Wyssmann ‐ 2 min read

With git you have this already at your hand with git-hooks: Git will fire off custom scripts when certain actions occur.

The scripts are to be placed under the hooks subdirectory i.e. .git/hooks. Alternatively you can also configure an alternative hooksPath e.g. by executing git config core.hooksPath path/to/the/scripts. The script file can be anything from bash to python, as long as it’s executable and is named after the hook. For example the script for the pre-commit hook is named pre-commit. When you initialized your git repo with git init you can find some examples under .git/hooks. The hook is considered successful if returns a zero and unsuccessful when returning non-zero.

The most important actions/hooks are the following ones - checkout https://www.git-scm.com/docs/githooks for a complete list:

You should also be aware that there are client-side hooks and server-side hooks. As per documentation they are divided into 3 categories: committing-workflow hooks, email-workflow scripts, and everything else. As mentioned above, client-side hooks live in a directory on the developers machine, thus they are not copied when cloning a repository and thus also not shared among developers.

So if you want to enforce certain policies for all developers you could use server-side hooks . The have to be configure by an administrator on the file system of the git server - see for example Gitlab Server Hooks. Server-side hooks run before and after pushes to the server - I’ve marked them in the list above explicitly.

However sometimes as a developer you want certain checks happen before one pushes the work to the server, so client-side is the better approach. But how to share git-hooks? Well there are a lot of generic and language-specific solution to manage git-hooks. Have a look at the list at projects at https://githooks.com/ which shows a nice lists of some existing solutions.

I recommend to look into the different tools/projects, they are quite interesting and I am sure you find one that suites you.