The detect-direct-checkins
utility can be used to detect non-merge commits on given branches in a Git repository. It
can be run as a pre-commit framework hook.
detect-direct-checkins
is available on PyPI for Python 3.5+ and can be installed with pip
:
python3 -m pip install detect-direct-checkins
If you use Arch Linux or one of its derivatives, you can also install detect-direct-checkins
from the
AUR:
yay -S python-detect-direct-checkins
You also find self-contained executables for 64-bit Linux distributions and macOS High Sierra and newer on the releases page. They are created with PyInstaller and only require glibc >= 2.17 on Linux (should be fine on any recent Linux system).
After the installation, switch your working directory to a Git repository you would like to check and run
detect-direct-checkins --branch release --allow-root
to check a branch release
for non-merge commits (but ignore initial root commits without parents).
Add
- repo: https://github.com/IngoMeyer441/detect-direct-checkins
rev: 0.1.2
hooks:
- id: detect-direct-checkins
- args: ['--branch=release', '--allow-root']
to your .pre-commit-config.yaml
to detect direct checkins to a branch release
. The --allow-root
switch ignores
root commits (initial commits without parents).
The --branch
argument can be given multiple times to check more than one branch.
This check is a post-commit
check, so make sure to install the pre-commit framework as a post-commit
hook:
pre-commit install --hook-type post-commit
I recommend to set default_stages: ['commit']
in your .pre-commit-config.yaml
. Otherwise, most checks will run
twice (in the pre-commit
and post-commit
stage).
Important note: Since this is a post-commit
hook, this check will not avoid the creation of disallowed
commits. It only tells you that a disallowed commit has been created. However, you can run
pre-commit run --hook-type post-commit
as part of your CI pipeline to enforce this check. Direct-checkins to protected branches will cause this check to fail in a CI job.
These options are supported:
--branch
: Branch which must only contain merge commits, can be given multiple times.--ignore
: Commit hashes which will be ignored, can be given multiple times--allow-root
: Allow root commits (commits without parents).
Please open an issue on GitHub if you experience bugs or miss features. Please consider to send a pull request if you can spend time on fixing the issue yourself. This project uses pre-commit itself to ensure code quality and a consistent code style. Run
make git-hooks-install
to install all linters as Git hooks in your local clone of detect-direct-checkins
.