So you pushed something that you did not mean to, huh? I have a simple solution for that, a global git hook that checks:
- A push is not being made into a remote named
- A push is made into remote URL containing your username.
- A push is not being made into branch named
- If you still want to push, you can use
--no-verifygit option to force it.
- Or create
.noverifyempty file within a git repository to disable this.
- Everything is just a single and global POSIX-compatible shell git hook.
Let me explain.
I name upstream repositories as
upstream, you can do this with
git clone -o upstream https://project.com/repo.git. Then I almost always want to create a
fork (e.g. on github.com or internal gitlab.com) and push into such repo, which
I typically name
origin. That is check number one.
Then most of my git repositories are hosted on github.com, gitlab.com or
similar sites where I use the very same username which also matches my OS
lzap that is. So the second check verifies there’s
lzap in an URL
Finally, I almost never want to push into
main branch, sometimes named
master. On many projects we also used
develop for the main branch, that’s
the check number three.
You want this? It’s super-easy. Create an empty directory on your computer
$HOME/.githooks and drop my
script. Make sure to give it executable flag. Finally, configure git to use
mkdir $HOME/.githooks curl -O $HOME/.githooks/pre-push https://raw.githubusercontent.com/lzap/gitconf/main/hooks/pre-push chmod +x $HOME/.githooks/pre-push git config core.hooksPath $HOME/.githooks
Make sure to review and edit my script, you will probably have a different
preference when it comes to branch or remote names. Beware that git only
supports executing hooks from a global directory (this case), or from git
.git/hooks). It’s always one, or the other. If you need to still
use some project-level hooks, the workaround is to create global hooks that
executes project hooks when they exist.
See it in action!
% git push HOOK: Pushing to disallowed branch (main, master, etc.)! HOOK: Use git push --no-verify to force this operation. error: failed to push some refs to 'github.com:lzap/gitconf.git'
If you want to force push, it’s easy help.
% git push --no-verify
.noverify empty file in the git repository to skip all checks all togeher for a particular repo. Make sure to put this into your global
That’s all for today.