Check commit message formatting, branch naming, commit author, email, and more.
Project description
Overview
Commit Check (aka cchk) is the most comprehensive open-source tool for enforcing Git commit standards — including commit messages, branch naming, author identity, commit signoff, and more — helping teams maintain consistency and compliance across every repository.
As a lightweight, free alternative to GitHub Enterprise Metadata restrictions and Bitbucket’s paid Yet Another Commit Checker plugin, Commit Check integrates DevOps principles and Infrastructure as Code (IaC) practices for a modern workflow.
Why Commit Check?
Feature |
Commit Check ✅ |
commitlint |
pre-commit hooks |
|---|---|---|---|
Conventional Commits enforcement |
✅ |
✅ |
✅ |
Branch naming validation |
✅ |
❌ |
Partial |
Author name / email validation |
✅ |
❌ |
❌ |
Signoff / DCO check |
✅ |
❌ |
❌ |
Co-author ignore list |
✅ |
❌ |
❌ |
Organization-level config inheritance |
✅ |
❌ |
❌ |
Zero-config defaults |
✅ |
❌ |
❌ |
Works without Node.js |
✅ |
❌ |
✅ |
TOML configuration |
✅ |
❌ |
✅ |
pre-commit framework integration |
✅ |
✅ |
✅ |
CI/CD environment variables |
✅ |
Partial |
❌ |
SLSA Level 3 supply chain security |
✅ |
❌ |
❌ |
What’s New in v2.0.0
Version 2.0.0 is a major release featuring a new configuration format, a modernized architecture, and an improved user experience.
✨ Highlights
TOML Configuration — Replaces .commit-check.yml with cchk.toml or commit-check.toml for clearer, more consistent syntax.
Simplified CLI & Hooks — Legacy pre-commit hooks and options removed to deliver a cleaner, more streamlined interface.
New Validation Engine — Fully redesigned for greater flexibility, performance, and maintainability.
Co-author ignore support — Bypass checks when a commit is co-authored by a bot or trusted identity in ignore_authors.
Organization-level configuration — Use inherit_from to share a base config across all repositories in your org.
Git config author validation — --author-name and --author-email now validate the configured identity for the next commit.
For the full list of updates and improvements, visit the What’s New page.
Installation
To install Commit Check, you can use pip:
pip install commit-check
Or install directly from the GitHub repository:
pip install git+https://github.com/commit-check/commit-check.git@main
Then, run commit-check --help or cchk --help (alias for commit-check) from the command line. For more information, see the docs.
Quick Start
1. Install and run with zero configuration:
pip install commit-check
commit-check --message --branch
2. Add to your pre-commit hooks (.pre-commit-config.yaml):
repos:
- repo: https://github.com/commit-check/commit-check
rev: v2.3.0
hooks:
- id: check-message
- id: check-branch
3. Add a badge to your repository:
[](https://github.com/commit-check/commit-check)
Configuration
Commit Check can be configured in three ways (in order of priority):
Command-line arguments — Override settings for specific runs
Environment variables — Configure via CCHK_* environment variables
Configuration files — Use cchk.toml or commit-check.toml
Use Default Configuration
Commit Check uses a default configuration if you do not provide a cchk.toml or commit-check.toml file.
The default configuration is lenient — it only checks whether commit messages follow the Conventional Commits specification and branch names follow the Conventional Branch convention.
Use Custom Configuration File
To customize the behavior, create a configuration file named cchk.toml or commit-check.toml in your repository’s root directory or in the .github folder, e.g., cchk.toml or .github/cchk.toml.
[commit]
# https://www.conventionalcommits.org
conventional_commits = true
subject_imperative = true
subject_max_length = 80
allow_commit_types = ["feat", "fix", "docs", "style", "refactor", "test", "chore", "ci"]
allow_merge_commits = true
allow_wip_commits = false
require_signed_off_by = false
# Bypass checks for bot/automation authors and co-authors:
ignore_authors = ["dependabot[bot]", "renovate[bot]", "copilot[bot]"]
[branch]
# https://conventional-branch.github.io/
conventional_branch = true
allow_branch_types = ["feature", "bugfix", "hotfix", "release", "chore", "feat", "fix"]
Organization-Level Configuration (inherit_from)
Share a base configuration across all repositories in your organization using inherit_from:
# .github/cchk.toml — inherits from org-level config, then overrides locally
inherit_from = "github:my-org/.github:cchk.toml"
[commit]
subject_max_length = 72 # Local override
The inherit_from field accepts:
A GitHub shorthand (recommended): inherit_from = "github:owner/repo:path/to/cchk.toml"
A GitHub shorthand with ref: inherit_from = "github:owner/repo@main:path/to/cchk.toml"
A local file path (relative or absolute): inherit_from = "../shared/cchk.toml"
An HTTPS URL: inherit_from = "https://example.com/cchk.toml"
The github: shorthand fetches from raw.githubusercontent.com. HTTP (non-TLS) URLs are rejected for security.
Local settings always override the inherited base configuration.
Use CLI Arguments or Environment Variables
For one-off checks or CI/CD pipelines, you can configure via CLI arguments or environment variables:
# Using CLI arguments
commit-check --message --subject-imperative=true --subject-max-length=72
# Using environment variables
export CCHK_SUBJECT_IMPERATIVE=true
export CCHK_SUBJECT_MAX_LENGTH=72
commit-check --message
# In pre-commit hooks (.pre-commit-config.yaml)
repos:
- repo: https://github.com/commit-check/commit-check
rev: v2.3.0
hooks:
- id: check-message
args:
- --subject-imperative=false
- --subject-max-length=100
See the Configuration documentation for all available options.
Usage
For detailed usage instructions including pre-commit hooks, CLI commands, and STDIN examples, see the Usage Examples documentation.
Examples
Check Commit Message Failed
Commit rejected by Commit-Check.
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
__\( C )/__ __\( H )/__ __\( E )/__ __\( C )/__ __\( K )/__
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| E || || R || || R || || O || || R ||
_.' '-' '._ _.' '-' '._ _.' '-' '._ _.' '-' '._ _.' '-' '._
(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)
`-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´
Commit rejected.
Type message check failed ==> test commit message check
The commit message should follow Conventional Commits. See https://www.conventionalcommits.org
Suggest: Use <type>(<scope>): <description>, where <type> is one of: feat, fix, docs, style, refactor, test, chore, ci
Check Branch Naming Failed
Commit rejected by Commit-Check.
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
__\( C )/__ __\( H )/__ __\( E )/__ __\( C )/__ __\( K )/__
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| E || || R || || R || || O || || R ||
_.' '-' '._ _.' '-' '._ _.' '-' '._ _.' '-' '._ _.' '-' '._
(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)(.-./`-´\.-.)
`-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´ `-´
Commit rejected.
Type branch check failed ==> test-branch
The branch should follow Conventional Branch. See https://conventional-branch.github.io/
Suggest: Use <type>/<description> with allowed types or add branch name to allow_branch_names in config, or use ignore_authors in config branch section to bypass
More examples see example documentation.
Badging your repository
You can add a badge to your repository to show that you use commit-check!
Markdown
[](https://github.com/commit-check/commit-check)
reStructuredText
.. image:: https://img.shields.io/badge/commit--check-enabled-brightgreen?logo=Git&logoColor=white&color=%232c9ccd
:target: https://github.com/commit-check/commit-check
:alt: commit-check
Versioning
Versioning follows Semantic Versioning.
Have question or feedback?
Please post to issues for feedback, feature requests, or bug reports.
License
This project is released under the MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file commit_check-2.5.0-py3-none-any.whl.
File metadata
- Download URL: commit_check-2.5.0-py3-none-any.whl
- Upload date:
- Size: 26.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5f1f3b51f865fdb95285852496ee2ca5f1f16ae81b8935eba24af7f0d358b3a
|
|
| MD5 |
ca8f3069988725bcc0cee4257b0ba357
|
|
| BLAKE2b-256 |
e9db20f453073888cdf36ce74ee787777d6776db0ec8f568d62d666f3460f4f5
|