A better pre-commit hook for git.
Install the gem
$ gem install pre-commit
Use the pre-commit command to generate a stub pre-commit hook
# In your git repo
$ pre-commit install
This creates a .git/hooks/pre-commit script which will check your git config and run checks that are enabled.
These are the available checks:
- white_space
- console_log
- debugger
- pry
- tabs
- jshint
- js_lint
- closure_syntax_check
- php (Runs php -l on all staged files)
- rspec_focus (Will check if you are about to check in a :focus in a spec file)
- ruby_symbol_hashrockets (1.9 syntax. BAD :foo => "bar". GOOD foo: "bar")
- local (executes
config/pre-commit.rb
with list of changed files) - merge_conflict (Will check if you are about to check in a merge conflict)
- migrations (Will make sure you check in the proper files after creating a Rails migration)
- ci (Will run the
pre_commit:ci
rake task and pass or fail accordingly) - rubocop (Check ruby code style using the rubocop gem. Rubocop must be installed)
- before_all (Check your RSpec tests for the use of
before(:all)
) - coffeelint (Check your coffeescript files using the coffeelint gem.)
Use pre-commit list
to see the list of default and enabled checks and warnings.
git config pre-commit.checks "whitespace, jshint, debugger"
To disable, simply leave one off the list
git config pre-commit.checks "whitespace, jshint"
pre-commit <enable|disbale> <git|yaml> <checks|warnings> check1 [check2...]
The git
provider can be used for local machine configuration, the yaml
can be used for shared
project configuration.
Example move jshint
from checks
to warnings
in yaml
provider and save configuration to git:
pre-commit disbale yaml checks jshint
pre-commit enable yaml warnings jshint
git add config/pre-commit.yml
git commit -m "pre-commit: move jshint from checks to warnings"
pre-commit
comes with 3 configuration providers:
default
- basic settings, read onlygit
- reads configuration fromgit config pre-commit.*
, allow local updateyaml
- reads configuration from/etc/pre-commit.yml
,$HOME/.pre-commit.yml
andconfig/pre-commit.yml
, allowsconfig/pre-commit.yml
updates