With pre-commit you can automate some repetitive tasks before doing a commit
on a git repository.
It is useful for identifying simple issues before submission to code review.
For example with pre-commit you can point out issues in code such as missing semicolons, trailing whitespace, and debug statements.
Pre-commit can work with any development language even though is a python package.
To install you can simply run:
pip install pre-commit
Once you have the package installed you need the file .pre-commit-config.yaml
with the hooks you need.
As an example you can use:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.3.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/psf/black rev: 19.3b0 hooks: - id: black
Once you are in a repository that has the .pre-commit-config.yaml
file you can install the hooks with:
pre-commit install
By default pre-commit
will run only on the stagged files. You can check all the files the first time you install it with:
pre-commit run --all-files
After that each time you try to do a commit pre-commit
will run all hooks and will prevent you from commiting simple issues.
You can update all pre-commit
hooks with:
pre-commit autoupdate
It is a good idea to run pre-commit
on your CI to check that nobody is pushing code with errors.
You can do it with:
pre-commit run --all-files
If you want to only run it on the files that have changed just do:
pre-commit run --from-ref origin.HEAD --to-ref HEAD
There are some default hooks defined here.
Some that I find really useful are:
You can add them with the following code:
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.3.0 hooks: - id: check-merge-conflict - id: check-json - id: check-toml - id: check-yaml - id: no-commit-to-branch