What are Git hooks?
Git hooks are scripts that Git executes before or after events such as: commit, push, and receive. Git hooks are a built-in feature - no need to download anything. Git hooks are run locally.
These hook scripts are only limited by a developer's imagination. Some example hook scripts include:
- pre-commit: Check the commit message for spelling errors.
- pre-receive: Enforce project coding standards.
- post-commit: Email/SMS team members of a new commit.
- post-receive: Push the code to production.
How do they work?
Every Git repository has a
.git/hooks folder with a script for each hook you can bind to. You're free to change or update these scripts as necessary, and Git will execute them when those events occur.
Here's a full list of hooks you can attach scripts to:
Why should I care?
Fair question! Git hooks can greatly increase your productivity as a developer. Being able to push to your staging or production environment without ever leaving Git is just plain awesome. Update your code, make a commit and push, and your code can be running in any environment you specify. No need to mess with ssh or ftp.
How do I implement Git hooks?
The short and easy: Overwrite one of the scripts in
.git/hooks and make it executable.
- overcommit - A well-maintained, up-to-date, flexible Git hook manager.
- Lolcommits - Takes a snapshot with your webcam every time you git commit code, and archives a lolcat style image with it.
- pre-commit - A framework for managing and maintaining multi-language pre-commit hooks.
- Hooks is a command line git hook management tool.
- Git Hooks Manager - A tool to manage project, user, and global Git hooks for multiple Git repositories.
- Git::Hooks - A framework for implementing Git (and Gerrit) hooks.
- git-pre-commit-hook - Hook that blocks bad commits. Useful for Python-development.
- App::GitHooks - A modular and easy to configure git hooks framework, supporting many plugins.
- Jig - A pre-commit hook on steroids
- GitPHPHooks - Write your hooks in PHP, manage and organize them on a task and project level. Has an additional Hooks library on GitHub
- Grunt GitHooks - Setup, manage and update your hooks with Grunt. Can be used with all languages, supports templates.
- git-hooks - Hook manager.
- Husky - Git hooks for Node.js, manage your hooks from your package.json.
- git-hooks-php - Git hooks for PHP based projects.
If you have a Git hook you love, or a resource you've written for the community - please create a pull request here.
Howdy, my name is Matthew Hudson and I created this guide to help myself and others wrap our head around integrating Git hooks with WebHooks.