Skip to content

Instantly share code, notes, and snippets.

@robatron
Last active April 13, 2023 17:26
Show Gist options
  • Save robatron/01b9a1061e1e8b35d270 to your computer and use it in GitHub Desktop.
Save robatron/01b9a1061e1e8b35d270 to your computer and use it in GitHub Desktop.

Automatically Prepend a Jira Issue ID to Git Commit Messages

Use a git hook to match a Jira issue ID from the current branch, and prepend it to every commit message

Assuming the current branch contains a Jira issue ID, you can use a git hook script to prepend it to every commit message.

  1. Create an empty commit-msg git hook file, and make it executable. From your project's root directory:

     install -b -m 755 /dev/null .git/hooks/commit-msg
    
  2. Save the following script to the newly-created .git/hooks/commit-msg file:

#!/bin/sh

COMMIT_FILE=$1
COMMIT_MSG=$(cat $1)
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
JIRA_ID=$(echo "$CURRENT_BRANCH" | grep -Eo "[A-Z0-9]{1,10}-?[A-Z0-9]+-\d+")

if [ ! -z "$JIRA_ID" ]; then
    echo "$JIRA_ID $COMMIT_MSG" > $COMMIT_FILE
    echo "JIRA ID '$JIRA_ID', matched in current branch name, prepended to commit message. (Use --no-verify to skip)"
fi

But I'm Lazy

Me too! Here's a one-liner to install the hook above:

if [ -d .git/hooks ]; then HOOKF=.git/hooks/commit-msg && if [ ! -f $HOOKF ]; then TMPF=`date +%s`-ghook && curl -s https://gist.githubusercontent.com/robatron/01b9a1061e1e8b35d270/raw > $TMPF && STARTL=`grep -n "scriptstart" $TMPF | head -1 | cut -d: -f1` && ENDL=`grep -n "scriptend" $TMPF | head -1 | cut -d: -f1` && sed -n `expr \`echo $STARTL\` + 2`,`expr \`echo $ENDL\` - 2`p $TMPF > $HOOKF && chmod 755 $HOOKF; rm $TMPF; else echo "Error: $HOOKF exists"; fi else echo "Error: Not a git repo"; fi

Enable Hooks Globally

To enable git hooks for all new git projects, you can use your own git template directory to build out your hooks. See the following article:

https://coderwall.com/p/jp7d5q/create-a-global-git-commit-hook

References

@zack-snyder
Copy link

How can I append the issue number in the next line?
switching to :echo "$COMMIT_MSG $JIRA_ID" > $COMMIT_FILE
doesn't work.

@TheLoneUs
Copy link

@zack-snyder
I know this is old, but:
Have you tried echo -e "$COMMIT_MSG\n$JIRA_ID" > $COMMIT_FILE
-e flag enables interpretation of backslashes and the \n is a newline. No guarantees it will work on all systems, but it should give you an idea of what you need to try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment