Git钩子:确保每个合并到主分支的提交都有一条消息,包括自动合并。

3
在我们的部署过程中,最后一步是将发布分支合并到主分支。我想通过挂钩来确保每个这样的合并都需要在提交时添加手动消息,以便合并人员有机会写下此次合并将包含哪些通用更改。即Change.log或发布说明。
到目前为止,我发现我需要的挂钩是pre-merge。 https://gitorious.org/git/mjg/commit/c15bfac6d3f5a28b3cd5745fef71e7f93bc1f8a4 它应该仅在合并到主分支时激活。我猜当非自动提交到主分支时也应该被调用。
有没有人有提示如何做到这一点?一个bash钩子会更好,但php也可以。或者我猜从其他语言我可以尝试将概念转换为bash或php。
提前感谢您的任何提示!

1
尝试使用 git merge --no-ff。即使可以进行 fast-forward,它也会始终创建一个合并提交。编辑器将提示输入合并提交的消息(预填充)。您甚至可以使用 git config merge.ff false 在配置中设置此选项。 - Haralan Dobrev
我在这里找到了一篇好的文章,我想那会帮助我解决问题。http://addamhardy.com/blog/2013/06/05/good-commit-messages-and-enforcing-them-with-git-hooks/现在只剩下一个问题,我如何在钩子中获取分支信息,所以当合并到主分支或更好的是当合并发布分支到主分支时,钩子应该只处于活动状态。 - Calamity Jane
1
使用 git rev-parse --abbrev-ref HEAD 命令获取当前分支名称。https://dev59.com/Hm025IYBdhLWcg3wCxZN#12142066 - Haralan Dobrev
我会尽快发布整个脚本,一旦我成功地弄清楚所有这些信息如何协同工作。 - Calamity Jane
1个回答

3

如承诺的那样,这是我的解决方案。将其粘贴到您的提交消息钩子中,并根据您的需求进行调整。

#!/bin/bash
# give me the branch I am currently working on
mybranch=`git rev-parse --abbrev-ref HEAD`

# Depending on the branch we do different validation
if [ $mybranch = master ]; then
regex="^[^Merge|^#].{71,}"
message="ERROR: Commit message is too short."
else
regex="^(PMS|GKM)-[0-9]{3,4}\s\:\s.{10,}"
message="ERROR: Commit message is missing the Ticketnumber in the format GKM-nnnn: or PMS-nnnn :."
fi

test "" != "$(grep -E $regex "$1")" || {
    cat $1 >&2
    echo >&2 $message
    exit 1
}

根据我选择的不同分支,需要使用不同的正则表达式和匹配错误信息。
这确保了对于任何非主分支,消息都以票号开头。对于主分支,我们不需要票号,而是需要一个更长的提交消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接