Files
2025-07-18 22:22:32 +02:00

159 lines
17 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
 
 Awesome Git Hooks
 
 
 Awesome Git Hooks
▐ :anchor: Easy-to-use git hooks for automating tasks during git workflows.
Git hooks are custom scripts you can use to automate tasks which are triggered before or after a git command is executed. There are two groups of these hooks: client-side and server-side. Client-side hooks are triggered by operations such as 
committing and merging, while server-side hooks run on network operations such as receiving pushed commits. This repo contains helpful resources as well as a variety of git hook scripts that can be easily customized to serve different purposes.
:heavy_check_mark: Nothing to install/download
:heavy_check_mark: Code is well-documented
:heavy_check_mark: Grab & go! Copy the code you want to use and paste into your .git/hooks folder
Contributions are _always_ welcome! Please see our Contribution Guidelines (CONTRIBUTING.md). Also, if you don't find the script you want below, you can create a new issue 
(https://github.com/CompSciLauren/awesome-git-hooks/issues/new?assignees=&labels=enhancement&template=new-git-hook-script-request.md&title=) to request it.
Contents
- Git Hook Scripts (#git-hook-scripts)
 - commit-msg (#commit-msg)
 - post-checkout (#post-checkout)
 - post-update (#post-update)
 - pre-commit (#pre-commit)
 - prepare-commit-msg (#prepare-commit-msg)
 - pre-push (#pre-push)
 - pre-rebase (#pre-rebase)
 - query-watchman (#query-watchman)
 - update (#update)
- Quick Start (#quick-start)
- Tools (#tools)
- Written Guides (#written-guides)
- Video Guides (#video-guides)
Git Hook Scripts
Note: The icon next to each script signifies what language it is written in.
│icon│language│
├────┼────────┤
│ │bash │
│ │python │
│ │perl │
commit-msg
- enforce-insert-issue-number (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/commit-msg-hooks/enforce-insert-issue-number.hook) - Make sure user did not delete the ISSUE-*# string that was generated by 
prepare-commit-msg/insert-issue-number.hook. 
post-checkout
- delete-pyc-files (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/post-checkout-hooks/delete-pyc-files.hook) - Delete all .pyc files every time a new branch is checked out. 
- new-branch-alert (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/post-checkout-hooks/new-branch-alert.hook) - Display a message when a new branch is checked out for the first time. 
post-update
- update-server-info (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/post-update-hooks/update-server-info.hook) - Prepare a packed repository for use over dumb transports (e.g. http). 
pre-commit
- dotenvx (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-commit-hooks/dotenvx.hook) - Prevent committing your .env file(s) to code. 
- format-code (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-commit-hooks/format-code.hook) - Run command to format code and re-add any files modified after formatting. 
- search-term (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-commit-hooks/search-term.hook) - Fail commit if a specific term is found in the code. 
- spell-check-md-files (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-commit-hooks/spell-check-md-files.hook) - Check files with .md extension for spelling errors. 
- verify-name-and-email (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-commit-hooks/verify-name-and-email.hook) - Fail commit if user.name or user.email is incorrect. 
prepare-commit-msg
- include-git-diff-name-status (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/prepare-commit-msg-hooks/include-git-diff-name-status.hook) - Include the output of "git diff --name-status -r" into the message, just before the "git 
status" output. 
- insert-issue-number (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/prepare-commit-msg-hooks/insert-issue-number.hook) - Insert issue number to beginning of the commit message. 
pre-push
- prevent-bad-push (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-push-hooks/prevent-bad-push.hook) - Prevent push of commits where the log message starts with "WIP" (work in progress). 
pre-rebase
- prevent-rebase (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/pre-rebase-hooks/prevent-rebase.hook) - Prevent topic branches that are already merged to 'next' branch from getting rebased, because allowing it would result in 
rebasing already published history. 
query-watchman
- fsmonitor-watchman (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/query-watchman-hooks/fsmonitor-watchman.hook) - Output to stdout all files that have been modified since a given time. 
update
- update (https://github.com/CompSciLauren/awesome-git-hooks/blob/master/update-hooks/prevent-unannotated-tags.hook) - Block unannotated tags from entering. 
Quick Start
1. Pick a hook, any hook! Try the "verify-name-and-email" one if you're not sure where to start.
2. Navigate to your project's hooks folder (.git/hooks).
3. You should see a list of files already in there. Create a new file called the exact commit type that you want to use (eg: "commit-msg", "pre-rebase", "pre-commit", etc). Do not give it an extension.
!create new file (create-new-file.gif)
4. Open your new file and paste the code from the hook you chose out of this repo (eg: verify-name-and-email.hook (https://github.com/CompSciLauren/git-hooks/blob/master/pre-commit-hooks/verify-name-and-email.hook)).
5. Save file. Done! Now the git hook will be triggered automatically.
Tools
- Husky (https://github.com/typicode/husky) - Manage git hooks with a nice user interface.
- Overcommit (https://github.com/sds/overcommit) - A fully configurable and extendable git hook manager.
- Git Build Hook Maven Plugin (https://github.com/rudikershaw/git-build-hook) - Install Git hooks and config during a Maven build.
- CaptainHook (https://github.com/CaptainHookPhp/captainhook) - Git hooks manager for PHP developers.
- pre-commit (https://github.com/pre-commit/pre-commit) - A framework for managing and maintaining multi-language pre-commit hooks.
Written Guides
- Git hooks documentation at git-scm.com (https://git-scm.com/docs/githooks)
- Git Pro book by Scott Chacon and Ben Straub (https://git-scm.com/book/en/v2)
- An Introduction to Git Hooks (https://www.sitepoint.com/introduction-git-hooks/)
- Atlassian Tutorial on Git Hooks (https://www.atlassian.com/ru/git/tutorials/git-hooks)
- Easy git hooks with husky (https://www.vojtechruzicka.com/githooks-husky/)
- Git Hooked (https://www.javascriptjanuary.com/blog/git-hooked 'Git Hooked')
- How To Use Git Hooks To Automate Development and Deployment Tasks (https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks)
- Automate Your Workflow with Git Hooks (https://hackernoon.com/automate-your-workflow-with-git-hooks-fef5d9b2a58c)
- Using JavaScript in Your Git Hooks (https://medium.com/@Sergeon/using-javascript-in-your-git-hooks-f0ce09477334 'Using JavaScript in Your Git Hooks')
- An In-Depth Look at Git Hooks (https://dzone.com/articles/an-in-depth-look-at-git-hooks)
- Git hooks and practical uses. Yes, even on Windows. (https://www.tygertec.com/git-hooks-practical-uses-windows/)
- Automatically Manage Git Hooks with Direnv (https://knpw.rs/blog/direnv-git-hooks)
Video Guides
- Git Hooks Part 1 - Getting Started (https://www.youtube.com/watch?v=aB3eq52sZSU)
- Git hooks and practical uses. Yes, even on Windows. (http://www.youtube.com/watch?feature=player_embedded&v=fMYv6-SZsSo&t=140s)
License
!CC0 (http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg) (https://creativecommons.org/publicdomain/zero/1.0/).
githooks Github: https://github.com/compscilauren/awesome-git-hooks