Git, NoGit

Friday, June 23, 2017 5:11 PM hacks

Ever pushed unwanted code to a Git repo after a long debugging session? For example, a rogue statement looking like:

var count = GetCount();
Console.WriteLine("DEBUG>>>" + count); // debug

Or, maybe, your precious secret API key that you hard-coded by mistake? Or, the offensive comment you wrote down in despair late late last night?

Of course that has never happened to you because you are a 10x developer, but it happened to me. Until I saved this simple script as .git/hooks/pre-commit in my projects:

#!/bin/sh

if git diff --cached | grep -q 'nogit'
then
    cat <<\EOF
Error: found 'nogit' marker in files
EOF
    exit 1
else
    exit 0
fi

Simply, it looks for the nogit tag in the committed code, and refuses to proceed if the tag was found. All you have to do is remember to tag your quick and dirty code:

var count = GetCount();
Console.WriteLine("DEBUG>>>" + count); // nogit

And Git will just not accept to commit until you remove it.

Caveats

It probably is an old trick.

This is a very simple script. It does not make any difference between comments and code, so a nogit variable would be rejected. If you have ideas to improve it, please share.

Before you try: one cannot add hooks to a repository and have them automatically enabled on each clone. This is for security reason, so one cannot ship a script that e.g. wipes the entire hard-disk. So the hook has to be manually enabled on each repo you clone.

Unless something can be done with Git's core.hooksPath global setting. Not sure.

comments powered by Disqus