NOW, LET’S SET UP GLOBAL GIT COMMIT HOOKS:
1. Enable git templates:
$ git config –global init.templatedir ‘~/.git-templates’
This tells git to copy everything in ~/.git-templates to your per-project .git/ directory when you run git init.
2. Create a directory to hold the global hooks:
$ mkdir -p ~/.git-templates/hooks
3. Write your hooks in ~/.git-templates/hooks.
For example, here’s a post-commit hook (located in ~/.git-templates/hooks/post-commit):
# Copy last commit hash to clipboard on commit
git log -1 –format=format:%h | pbcopy
# Add other post-commit hooks
4. Make sure the hook is executable.
chmod a+x ~/.git-templates/hooks/post-commit
5. Re-initialize git in each existing repo you’d like to use this in:
$ git init
Note: If you already have a hook defined in your local git repo, this will not overwrite it.
NOW, LET’S CREATE A GLOBAL GIT PRE-COMMIT HOOK:
# git usurbs your bin path for hooks and will always run system python
site_packages = glob.glob(‘%s/lib/*/site-packages’ % os.environ[‘VIRTUAL_ENV’])
from flake8.run import git_hook
COMPLEXITY = 10
STRICT = True
if __name__ == ‘__main__’:
FINALLY, LET’S TAKE IT FOR A SPIN!
Go to some of your repos and re-initialize it to take the pre-commit hook:
$ git init
Now, edit some of your Python files, introducing some violation (like a >80 columns line, only one blank line between function/class definitions, etc.) and try to commit it:
$ git commit setup.py
setup.py:4:1: E302 expected 2 blank lines, found 0
setup.py:8:1: E302 expected 2 blank lines, found 0
Matias Herranz is as a Python Developer for Santex. He is a Computer Science and Open Source software enthusiast. His professional experience has focused on Python/Django web app development and some incursions in mobile apps for iPhone/Android. He is a team player who enjoys and finds it rewarding to share the things he learns, either through conferences and lectures, or through day-to-day communication with his coworkers.