1.6 KiB
title | date | tags | |||
---|---|---|---|---|---|
Git Tips - Global Pre-commit Hooks | 2020-01-01T21:00:39Z |
|
Git hooks are a feature of the Git VCS that allow you to fire off custom logic on the client side when you take
actions in your repository. These are shell scripts in the .git/hooks/
directory of your repository, but they can also
exist in your home directory at ~/.githooks/
.
Any hooks found in ~/.githooks/
are executed globally, this makes it easy to setup a custom workflow that is consistent
across your entire machine.
Automatically lint and test on commit
One of my favorite hooks is a ~/.githooks/pre-commit
hook that auto runs test and lint commands from a makefile
or
package.json
if they're found:
{{<highlight bash "linenos=table">}}
#!/usr/bin/env bash
if [ -f "$PWD/makefile" ] && [ ! -z "$(cat $PWD/makefile | grep '^lint:')" ]; then
echo "running make lint"
make lint
elif [ -f "$PWD/package.json" ] && [ ! -z "$(cat $PWD/package.json | grep "^\"lint\":")" ]; then
echo "running npm run lint"
npm run lint
fi
if [ -f "$PWD/makefile" ] && [ ! -z "$(cat $PWD/makefile | grep '^test:')" ]; then
echo "running make test"
make test
elif [ -f "$PWD/package.json" ] && [ ! -z "$(cat $PWD/package.json | grep "^\"test\":")" ]; then
echo "running npm run test"
npm run test
fi
{{</highlight>}}
If the test or lint command fails then the git commit
command fails. If I absolutely need to commit something in spite
of the lint/test results I can do git commit --no-verify
to skip the pre-commit
hook.