git hook для корректного сообщения коммита (#123 хорошее сообщение)

Мне нужно убедиться, что сообщения о коммите являются законными, иначе отклоните их. Сообщение коммита должно быть похоже на «# 123 исправление отсутствующей скобки».

Я хочу убедиться, что оно начинается с хеша, содержит целое число (без 123a) и содержит не менее 10 слов.

Приятно иметь: сообщение не будет одинаковым подряд

Я использую этот плагин Trac для набора изменений, он более подробно описывает формат сообщения фиксации http://trac-hacks.org/wiki/TracTicketChangelogPlugin

Спасибо,


person Mike Henke    schedule 22.08.2011    source источник


Ответы (3)


Вы можете создать хук pre-receive, который отказывается от коммитов на основе любых критериев, которые вам нравятся — вам просто нужно вывести ошибку в стандартный вывод и выйти с ненулевым статусом. Например, что-то вроде:

#!/bin/sh
while read rev_old rev_new ref
do
    MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '^[a-f0-9]+ #[0-9]+ ')"
    if [ x"$MALFORMED" != x ]
    then
        echo Some commits had a malformed subject line
        exit 1
    fi
done

(Я не проверял это, но вы поняли...)

person Mark Longair    schedule 22.08.2011

Я создал хук commit-msg с помощью:

#!/usr/bin/env ruby
message_file = ARGV[0]
message = File.read(message_file)

#starts with # then number, space, and at least 5 words no more than 200
$regex = /(^#[0-9]+ \W*(\w+(\W+|$)){5,200})/

if !$regex.match(message)
puts "Your message is not formatted correctly (example: #XXX at least 5 words)"
exit 1
end

Я позаимствовал из этого сообщения в блоге http://fhopf.blogspot.com/2011/01/git-hook-for-redmine-messages.html

person Mike Henke    schedule 23.08.2011
comment
Ах, из вашего вопроса мне не было ясно, что вы хотите предотвратить создание коммитов неправильного формата даже локально. Мой ответ касается отказа от push-уведомлений, содержащих коммиты с неправильным форматом, что означает, что вам не нужно организовывать распространение своего хука для каждого участника — вы можете захотеть и то, и другое. - person Mark Longair; 23.08.2011
comment
Ваш ответ помог мне получить хорошее понимание, поэтому я смог сделать крючок. - person Mike Henke; 23.08.2011

Майк,

Наша группа пользователей, группа пользователей веб-разработчиков Центральной Флориды, недавно обсуждала GitHooks, которые могут быть реализованы для решения представленной вами проблемы. Дискуссию вел Рик Осборн из Университета Full Sail. Вы можете получить доступ к собранию здесь http://www.meetup.com/florida-web-developers/events/20352661/ и запись здесь http://www.meetup.com/florida-web-developers/messages/boards/thread/12465891/#45223031.

Если вы потратите время на просмотр всего записанного обсуждения, вы увидите, как Рик шаг за шагом проведет вас через этот процесс, включая загружаемые примеры.

Надеюсь это поможет.

person Aaron Greenlee    schedule 22.08.2011