git hook: убедитесь, что каждое слияние с мастером имеет сообщение, а также автоматическое слияние
В нашем процессе развертывания одним из последних шагов будет слияние ветки релиза с основной веткой.
Я хочу через ловушку убедиться, что каждому из этих слияний требуется ручное сообщение в коммите, чтобы у человека, сливающегося, была возможность записать, какие общие изменения будут внесены в мастер с этим слиянием. Ака Change.log или заметки о выпуске.
Я обнаружил, что крюк, который мне понадобится, будет предварительным слиянием. https://gitorious.org/git/mjg/commit/c15bfac6d3f5a28b3cd5745fef71e7f93bc1f8a4 Его следует активировать только при слиянии с основной веткой. Я думаю, это также должно быть вызвано, когда происходит неавтоматическая фиксация в мастер.
Кто-нибудь намекает, как я могу это сделать? Желательно использовать bash hook, но php тоже подойдет. Или я думаю, что с других языков я могу попытаться перевести эту концепцию на bash или php.
Спасибо за любые советы заранее!
1 ответ
Как и обещал, вот мое решение. Прошлое это в вашем крюке 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
}
В зависимости от ветки я выбираю разные регулярные выражения и соответствующие сообщения об ошибках.
Это гарантирует, что для любой ветви, не являющейся ведущей, сообщение начинается с номера заявки. Для главной ветки нам не нужен номер тикета, а более длинное сообщение о коммите.