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.
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.
Git pre-commit example
#!/usr/bin/env bash
# file : pre-commit
# purpose : common checks before committing changes
#
# author : harald van der laan
# date : 2018/10/07
# version : v1.0.0
# check if current local branch is not a rejected branch
declare -a rejected
rejected=(master production)
current=$(git symbolic-ref --short HEAD 2> /dev/null)
echo
for branch in ${rejected}; do
if [[ "${current}" = "${branch}"]]; then
echo "[-] pre-commit: ${current} is a rejected branch to commit."
echo "[-] pre-commit: please undo your changes an us a other branch."
echo
exit 1
fi
done
# check is current branch is behind remote origin
git fetch
behind=$(git log --oneline ..@{u} 2> /dev/null | wc -l | tr -d ' ')
if [[ ${behinf} -gt 0 ]]; then
echo "[-] pre-commit: your local branch is behind of remote origin."
echo "[-] pre-commit: please git fetch && git pull first."
echo
exit 1
fi
exit 0