忽略prepare-commit-msg git hook的合并提交

时间:2019-05-30 13:22:56

标签: git githooks

我想出了以下prepare-commit-msg git钩子:

#!/bin/sh

BRANCH=`git branch | grep '^*' | sed -e 's/^\* //'`
MESSAGE=`cat "$1"`
JIRA_ID=$(echo "$BRANCH" | grep -Eo "[A-Z0-9]{1,10}-?[A-Z0-9]+-\d+")

if [ -z "$JIRA_ID" ]; then
    echo "$MESSAGE" > "$1"
else
    echo "[$JIRA_ID] $MESSAGE" > "$1"
fi

它通过向每个提交消息添加分支名称(以BRANCH-123的形式)来完成其工作。但是,我不希望它与具有自动生成提交消息的合并提交一起使用。 Merge branch 'master' into BRANCH-123。用我的钩子将其转换为BRANCH-123 Merge branch 'master' into BRANCH-123

我需要编辑脚本,以某种方式忽略(不应用钩子)以Merge branch开头的提交。

1 个答案:

答案 0 :(得分:3)

prepare-commit-msg的文档所述,

  

它需要一到三个参数。第一个是文件名   包含提交日志消息。第二个是   提交消息,可以是:消息(如果给出了-m或-F选项);   模板(如果提供了-t选项或配置选项   设置了commit.template);合并(如果提交是合并或   .git / MERGE_MSG文件存在);壁球(如果是.git / SQUASH_MSG文件   存在);或提交,然后提交SHA-1(如果是-c,-C或--amend   选项。)

我们可以测试第二个参数,如果它是merge,则以0退出:

#!/bin/bash

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

if [ "${COMMIT_SOURCE}" = merge ];then
    exit 0
fi