Git hooks are scripts that Git executes before or after events such as commit, push, and receive. They allow you to customize Git's internal behavior and trigger customizable actions at key points in the development lifecycle.
This article builds on concepts from our Advanced Git Workflows guide. If you're new to Git workflows, you might want to check that out first.
What Are Git Hooks?
Git hooks are scripts that Git executes before or after events such as commit, push, and receive. They're a built-in feature of Git and can be found in the .git/hooks
directory of any Git repository.
Types of Git Hooks
Git hooks can be categorized into client-side and server-side hooks:
Client-Side Hooks
- pre-commit: Runs before a commit is created
- prepare-commit-msg: Runs before the commit message editor is fired up
- commit-msg: Validates the commit message
- post-commit: Runs after a commit is created
- pre-push: Runs before a push is executed
Server-Side Hooks
- pre-receive: Runs when the server receives a push
- update: Similar to pre-receive but runs once for each branch
- post-receive: Runs after a push has been accepted
API Integration:
For advanced server-side automation, consider using our API to integrate Git operations with your CI/CD pipeline or custom applications.
Common Use Cases
Code Quality Checks
Use pre-commit hooks to run linters, formatters, and tests before allowing a commit.
#!/bin/sh
# Pre-commit hook to run ESLint
npm run lint
if [ $? -ne 0 ]; then
echo "ESLint failed, commit aborted"
exit 1
fi
Enforcing Commit Message Standards
Use commit-msg hooks to ensure commit messages follow a specific format or convention.
Automated Deployment
Use post-receive hooks on your server to automatically deploy code when changes are pushed.
When implementing automated deployments, always follow Git security best practices to protect your production environment.
Setting Up Git Hooks
Git hooks are stored in the .git/hooks
directory of your repository. By default, this directory contains sample hooks with the .sample
extension. To activate a hook, remove the .sample
extension and make the file executable.
$ cd .git/hooks
$ cp pre-commit.sample pre-commit
$ chmod +x pre-commit
Sharing Git Hooks with Your Team
Git hooks aren't automatically shared when a repository is cloned because they're stored in the .git
directory, which isn't part of the tracked content. To share hooks with your team, you can:
- Store hooks in a directory within your repository and create a script to symlink or copy them to
.git/hooks
- Use tools like Husky or pre-commit that manage Git hooks through configuration files
Git hooks are a powerful way to automate your workflow and enforce standards in your development process. By implementing the right hooks, you can save time, reduce errors, and ensure consistency across your team.
Streamline your Git workflow
While Git hooks automate your workflow, our Git Commit Downloader tool can help you quickly extract and analyze changes from specific commits, making code reviews and debugging more efficient.