Version 1

Current

Created 7 days ago

Changelog

Initial version

Skill Content

# Git Hooks Setup > Set up pre-commit, pre-push, and commit-msg hooks --- You are a Git automation specialist. The user wants to set up pre-commit, pre-push, and commit-msg hooks to automate validation and prevent bad commits/pushes. ## What to check first - `.git/hooks/` directory exists and is readable in your repo - Current Git version (git --version) supports hooks you plan to use - Whether you need hooks to run in all local clones or via a shared tool like Husky ## Steps 1. Navigate to `.git/hooks/` directory and list existing hook templates with `ls -la .git/hooks/` to see what's already there 2. Create the pre-commit hook by creating file `.git/hooks/pre-commit` with `touch .git/hooks/pre-commit` 3. Make the pre-commit hook executable with `chmod +x .git/hooks/pre-commit` so Git can run it 4. Create the pre-push hook by creating file `.git/hooks/pre-push` with `touch .git/hooks/pre-push` 5. Make the pre-push hook executable with `chmod +x .git/hooks/pre-push` 6. Create the commit-msg hook by creating file `.git/hooks/commit-msg` with `touch .git/hooks/commit-msg` 7. Make the commit-msg hook executable with `chmod +x .git/hooks/commit-msg` 8. Test hooks by running `git commit --allow-empty -m "test"` to trigger pre-commit and commit-msg, and `git push --dry-run` to test pre-push ## Code ```bash #!/bin/bash # .git/hooks/pre-commit # Runs before commit is created; exit with non-zero to block commit set -e echo "🔍 Running pre-commit checks..." # Check for staged files if git diff --cached --quiet; then echo "❌ No staged changes to commit" exit 1 fi # Lint staged JavaScript/TypeScript files STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|ts|jsx|tsx)$' || true) if [ ! -z "$STAGED_FILES" ]; then echo "📋 Linting staged files..." echo "$STAGED_FILES" | xargs npx eslint --fix || exit 1 git add $STAGED_FILES fi # Check for large files (> 5MB) LARGE_FILES=$(git diff --cached --name-only | while read file; do if [ -f "$file" ]; then size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null) if [ "$size" -gt 5242880 ]; then echo "$file" fi fi done) if [ ! -z "$LARGE_FILES" ]; then echo "⚠️ Large files detected (>5MB ``` *Note: this example was truncated in the source. See [the GitHub repo](https://github.com/Samarth0211/claude-skills-hub) for the latest full version.* ## Common Pitfalls - Treating this skill as a one-shot solution — most workflows need iteration and verification - Skipping the verification steps — you don't know it worked until you measure - Applying this skill without understanding the underlying problem — read the related docs first ## When NOT to Use This Skill - When a simpler manual approach would take less than 10 minutes - On critical production systems without testing in staging first - When you don't have permission or authorization to make these changes ## How to Verify It Worked - Run the verification steps documented above - Compare the output against your expected baseline - Check logs for any warnings or errors — silent failures are the worst kind ## Production Considerations - Test in staging before deploying to production - Have a rollback plan — every change should be reversible - Monitor the affected systems for at least 24 hours after the change --- *From [CLSkills.in](https://clskills.in/browse) — 2,300+ free Claude Code skills*