Skip to content

Instantly share code, notes, and snippets.

@wacko wacko/pre-commit
Last active Feb 18, 2019

What would you like to do?
Git hook to avoid commit debug lines (binding.pry console.log debugger...)
#!/usr/bin/env ruby
# Validates that you don't commit forbidden keywords to the repo
# You can skip this checking with 'git commit --no-verify'
exit 0 if ARGV.include?('--no-verify')
# Update this list with your own forbidden keywords
KEYWORDS = %w(binding.pry console.log debugger)
def red(text) "\033[31m#{text}\033[0m"; end
def yellow(text) "\033[33m#{text}\033[0m"; end
# list all the files staged for commit
files_changed = %x(git diff --cached --name-only --).split
# search files for keywords
%x(git grep -q -E "#{KEYWORDS.join('|')}" #{files_changed.join(' ')})
if $?
puts "# Check following lines:"
files_changed.each do |file|
KEYWORDS.each do |keyword|
%x(git grep -q #{keyword} #{file})
if $?
line = %x(git grep -n #{keyword} #{file} | awk -F ":" '{print $2}').split.join(', ')
puts "#\t#{red(file)}:#{line} contains #{yellow keyword}."
puts "Use 'git commit --no-verify' to skip this validation"
exit 1

This comment has been minimized.

Copy link
Owner Author

wacko commented May 19, 2015

Hooks should be located on $GIT_DIR/hooks/ folder.
i.e.: ~/my-project/.git/hooks/pre-commit

Save this hook under $HOME/.git-templates/hooks
And then add to $HOME/.gitconfig:

  templatedir = $HOME/.git-templates

So it will be automatically copied into your project any time you run git init 😉
(you can replace .git-templates with any other path)

More info: Git Init


This comment has been minimized.

Copy link

sathiyaseelan commented Feb 19, 2017

While adding manually to the existing project, don't forget to change mode (chmod +X pre-commit) . I've missed and the hook is not executed


This comment has been minimized.

Copy link

yalmasri commented Jul 16, 2018

thank you so much


This comment has been minimized.

Copy link

tamphh commented Aug 30, 2018

Thank you.


This comment has been minimized.

Copy link

bluemihai commented Oct 19, 2018

I have found this very useful — thank you!

I just ran into an issue with a merge conflict though... since I believe git merge automatically calls git commit, I found myself in a bit of a Catch-22.

If I git merge --continue, I get the error

  (use "git commit" to conclude merge)

If I git commit, I get the error message from the hook.

I had to just temporarily turn off the hook.
Any thoughts on how to handle this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.