webestit / githooks
Repository-Managed Git Hooks: language-agnostic, POSIX-compliant
v1.0.1
2026-01-06 15:10 UTC
README
🪝 Repository-Managed Git Hooks
This package allows you to manage Git hooks centrally within your repository.
It's language-agnostic and only requires Git and a POSIX-compliant shell (like sh, bash, dash, or zsh).
🚀 Installation
-
Add post-install/update scripts to your composer.json
(so the package automatically configures git hooks):{ "scripts": { "post-install-cmd": [ "@composer exec githooks install" ], "post-update-cmd": [ "@composer exec githooks install" ] } } -
Install the package:
composer require webestit/githooks
The package will automatically:
- Configure
core.hooksPathto point to its ownhooksdirectory. - Create a
.githooksdirectory in your project root with subdirectories for common hooks.
ℹ️ How it works
- The package sets Git's
core.hooksPathto its directory which contains all Git hooks. - Every Git hook executes all executable scripts found in your project's
.githooks/<hook-name>/directory. - Scripts are executed in alphabetical order (e.g.,
01-check.sh,02-test.sh).
➕ Adding hooks to your project
- Go to the
.githooks/<hook-name>/directory in your project root. - Add your shell script:
# Example: .githooks/pre-commit/01-lint.sh #!/bin/sh echo "Running linter..." # your logic here
- Make it executable:
chmod +x .githooks/pre-commit/01-lint.sh
💡 Examples
You can find example hooks in the package's examples directory. Feel free to copy and adapt them to your project's
.githooks/ folder.
⚠️ Bypassing hooks temporarily
You can bypass hooks using --no-verify:
git commit --no-verify
⚠️ Disabling repository hooks
To stop using these managed hooks and return to Git defaults:
git config --unset core.hooksPath