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
}

В зависимости от ветки я выбираю разные регулярные выражения и соответствующие сообщения об ошибках.

Это гарантирует, что для любой ветви, не являющейся ведущей, сообщение начинается с номера заявки. Для главной ветки нам не нужен номер тикета, а более длинное сообщение о коммите.

Другие вопросы по тегам