We set up a pre-commit hook for our Python project. The pre-commit
sits in the .git
folder which is untracked (for good reason).
But it's quite common for someone new to clone a repo and forget to get up the commit hook. Is it possible to automate this? E.g. by having the commit hook tracked by git? Or via some other mechanism e.g. when git clone
is called the hook is automatically set up.
For example, adding the !.git/hooks/pre-commmit
to .gitignore
doesn't do the trick.
It's possible but not recommended.
When a repository is initialized, it copies hooks from git template. We can create a post-checkout
in the template. Here's a sample:
#!/bin/bash
gitworktree=$(git rev-parse --show-toplevel)
if [[ -f ${gitworktree}/pre-commit ]];then
echo deploy pre-commit
cp -v ${gitworktree}/pre-commit ${gitworktree}/.git/hooks/pre-commit
chmod a+x ${gitworktree}/.git/hooks/pre-commit
fi
After git clone
without -n
, the post-checkout
is copied to the new repository's .git/hooks
automatically. And then the code is checked out and it invokes post-checkout
. If pre-commit
exists in the new repository, it's copied to .git/hooks
. This is just a draft plan. There might be some issues in a real case. For example, how can we deal with the pre-commit
which already exists in the template? Is it necessary to check if the pre-commit
is a committed one? What if there are vicious codes in pre-commit
?
As other answers say, it's not a good idea. Don't do it in production envirionment.
Have a look at https://pre-commit.com/
You can create a separate repository with your hooks and use it in your projects. Usage is configured via YAML-files.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With