Overview
Credits to this StackOverflow answer: https://stackoverflow.com/a/53669975/1800854 ❤
Follow these steps to set up a global commit message hook that will extract the issue key from your branch id and prepend it to your commit messages automatically. This allows other team members to easily track down who wrote what code.
Steps
-
- Make sure you have a variant of grep installed that supports PCRE
- On Mac you can do this using: brew install ggrep
-
Create folder somewhere on disk for global git hooks
1mkdir -p ~/git/hooks - Make a file here called
commit-msg with the following content. File is also available here.
NOTE: Replace grep with ggrep if needed (for Mac)1234567891011121314151617181920212223242526#!/bin/bash# The script below adds the branch name automatically to# every one of your commit messages. The regular expression# below searches for JIRA issue key's. The issue key will# be extracted out of your branch name## A variant of grep support the -P flag for PCRE is required#REGEX_ISSUE_ID="((?!([A-Z0-9a-z]{1,10})-?$)[A-Z]{1}[A-Z0-9]+-\d+)"# Find current branch nameBRANCH_NAME=$(git symbolic-ref --short HEAD)if [[ -z "$BRANCH_NAME" ]]; thenecho "No branch name... "; exit 1fi# Extract issue id from branch nameISSUE_ID=$(echo "$BRANCH_NAME" | LC_ALL=en_US.utf8 grep -o -P "$REGEX_ISSUE_ID")# Prepend issue id if it was foundif [[ -z "$ISSUE_ID" ]]; thenecho $(cat "$1") > "$1"elseecho "$ISSUE_ID"': '$(cat "$1") > "$1"fi - Make this file executable
1chmod +x commit-msg
- Configure git to globally use this folder as the global hook folder
1git config --global core.hooksPath ~/git/hooks
- Make sure you have a variant of grep installed that supports PCRE
Example
Notes
The regexp used will match:
- ✔️ TASK-100
- ✔️ JAVA-1-is-the-best
- ✔️ ROBOT-777-LETS-get-it-done-2
- ✔️ issues/EASY-42-its-too-easy-baby
Works but be careful with:
- ⚠️ DEJAVU-1-DEJAVU-2-maybe-dont-do-this
Will not match:
- ❌ test-500-lowercase-wont-work
- ❌ TEST100-nope-not-like-this
Warning: Global hooks will override local repository hooks if the projects you are using utilises them.
Tyler G
March 30, 2022 at 2:03 AM
The list under “Will not match:” is the same as the list under ~”Will match:”
Copy/paste error?
Mo Beigi
March 31, 2022 at 11:23 PM
Hi Tyler, yeah it was a copy and paste error. Fixed now. Thank you!
Andy
February 9, 2023 at 9:11 AM
what if the branch is not named with Jira key and we want to check the message for the key and enforce that?
Mo Beigi
February 25, 2023 at 6:11 PM
Right now this hook is based on the branch name being set correctly first.