git钩子:确保每个合并到主程序中都有一条消息,并且自动合并

git钩子:确保每个合并到主程序中都有一条消息,并且自动合并,git,merge,githooks,Git,Merge,Githooks,在我们的部署过程中,最后一个步骤是将发布分支合并到主分支中 我想通过一个钩子来确保这些合并中的每一个都需要提交一条手动消息,这样合并的人就有机会写下通过这个合并将发生哪些一般性的更改。又名Change.log或发行说明 到目前为止,我发现我需要的钩子是预合并。 只有在合并到主分支时才应激活它。我想在发生对主服务器的非自动提交时也应该调用它 有人能给我一些提示吗?最好使用bash钩子,但也可以使用php。或者我想从其他语言中我可以尝试将这个概念翻译成bash或php 感谢您提前提供的任何提示 正如

在我们的部署过程中,最后一个步骤是将发布分支合并到主分支中

我想通过一个钩子来确保这些合并中的每一个都需要提交一条手动消息,这样合并的人就有机会写下通过这个合并将发生哪些一般性的更改。又名Change.log或发行说明

到目前为止,我发现我需要的钩子是预合并。 只有在合并到主分支时才应激活它。我想在发生对主服务器的非自动提交时也应该调用它

有人能给我一些提示吗?最好使用bash钩子,但也可以使用php。或者我想从其他语言中我可以尝试将这个概念翻译成bash或php


感谢您提前提供的任何提示

正如我承诺的,这里是我的解决方案。在commit.msg钩子中跳过此选项,并根据需要进行调整

#!/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
}
根据分支,我选择不同的正则表达式和匹配的错误消息


这确保了对于任何不是主分支的分支,消息以票证号开头。对于主分支,我们不需要票证号码,而是需要更长的提交消息

尝试使用
git合并--无ff
。这将始终创建一个合并提交,即使可以执行
f
ast-
f
orward。编辑器将提示向合并提交发送消息(带有预填充的消息)。你甚至可以在配置中使用
git-config-merge.ff-false设置它。我在这里找到了一篇很好的帖子,我想这会帮助我解决这个问题。现在只剩下如何在钩子中获取我所在分支的信息的问题了,因此钩子只有在合并到master时才应该是活动的,或者在将release合并到master时更好。使用
git rev parse--abbrev ref HEAD
作为分支名称。一旦我弄明白了所有这些信息是如何成功地协同工作的,我就会发布整个脚本。