0

How to validate the commit message in precommit?

The commit message should be valid for the following condition.

the prefix of the commit message should be like feature({A-Z}:{0-9}): 'commit message'

I am a beginner for git

James Z
  • 12,209
  • 10
  • 24
  • 44
Akbar Basha
  • 1,168
  • 1
  • 16
  • 38
  • 1
    What do you mean by "validate the commit message"? – RobertAKARobin Dec 13 '18 at 15:42
  • @RobertAKARobin sorry for this i have mentioned – Akbar Basha Dec 13 '18 at 15:45
  • @AkbarBasha I am looking for same thing. Please help me if you got the answer – Ajit Jun 11 '19 at 08:48
  • @Ajit i did using gulp task. find the code below, gulp.task('commit-message', function (done) { // Get commit message from git commit edit message file let msg = fs.readFileSync('.git/COMMIT_EDITMSG', 'utf8'); msg = msg.split('\n').join(' '); if (!RegExp(regexp.COMMIT_TYPES).test(msg)) { const error = '\n The template: \n {spac}: \n\n Example: \n PWA-01 : Fixed bug \n\n'; // console.log(error); process.exitCode = 1; } else { // Allow git commit process.exitCode = 0; } done(); }); – Akbar Basha Jun 18 '19 at 07:20

1 Answers1

1

In your local copy, your .git/hooks folder contains a set of .sample files. For your specific case, you would use the commit-msg.sample file.

$            cd .git/hooks
.git/hooks$  cp commit-msg.sample commit-msg
.git/hooks$  cat commit-msg
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message.  The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit.  The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".

# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

# This example catches duplicate Signed-off-by lines.

test "" = "$(grep '^Signed-off-by: ' "$1" |
     sort | uniq -c | sed -e '/^[   ]*1[    ]/d')" || {
    echo >&2 Duplicate Signed-off-by lines.
    exit 1
}

You can modify this script as you see fit. When you exit 1, the commit process will halt instead of completing successfully.

Ian MacDonald
  • 13,472
  • 2
  • 30
  • 51