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 at ~/.githooks/
.
Any hooks found in ~/.githooks/
are executed globally for the user of that shell, this makes it awesome for running a
custom workflow that is consistent across your entire machine.
Useful hooks
My favorite hook that I'm running these days is a ~/.githooks/pre-commit
hook that auto runs tests and lint commands
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 failing I can do git commit --no-verify
to skip the pre-commit
hook.