且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

git hook:确保每个合并到master中的消息也都自动合并

更新时间:2023-02-05 12:00:51

这里承诺的是我的解决方案。

 #!/ bin / bash 
#give给你的commit.msg钩子过去并适应你的需求。我目前正在处理的分支
mybranch =`git rev-parse --abbrev-ref HEAD`

#根据分支我们做不同的验证
if [$ mybranch = master];那么
regex =^ [^合并| ^#]。{71,}
message =错误:提交消息太短。
else
regex =^(PMS | GKM) - [0-9] {3,4} \s\:\s。{10,}
message = 错误:提交消息缺少格式为GKM-nnnn:或PMS-nnnn:的票证号码。
fi

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

根据分支,我选择不同的正则表达式和匹配的错误消息。

这可以确保任何分支不被主人,该消息以票号开始。对于主分支,我们不需要票号,但需要更长的提交消息。

In our deployment process on of the last steps will be a merge of the release branch into the master branch.

I want to ensure via a hook, that each of these merges needs a manual message in the commit, so the person merging has the opportunity to write down what general changes will go into the master with this merge. Aka Change.log or release notes.

I found so far that the hook I would need would be the pre-merge. https://gitorious.org/git/mjg/commit/c15bfac6d3f5a28b3cd5745fef71e7f93bc1f8a4 It should only be activated when merging into the master branch. I guess it also should be called when a non-automatic commit into the master takes place.

Has anybody some hints how I can do that? A bash hook would be preferred, but php is also fine. Or I guess from other languages I can try to translate the concept to bash or php.

Thank you for any hints in advance!

as promised here is my solution. Past this in your commit.msg hook and adapt to your needs.

#!/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
}

Depending on the branch I choose different regular expressions and matching error messages.

This ensures for any branch not being master, that the message starts with a ticket number. For the master branch we don't need a ticket number, but a longer commit message.