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.