2015-07-06 4 views
2

Я хотел бы, чтобы заставить всех разработчиков, совершающие к моему частных Github репо всегда добавить сообщение фиксации, что следует следующий синтаксис:Как установить этот precommit msg hook для Github?

[ticketid] description 
  • TicketID может быть неограниченное количество букв или цифр в окружении скобок []
  • описание может быть неограниченным свободный текст

Пустые комментарии запрещены. Оба значения являются обязательными.

Действительно пример коммита:

[dk93jled] Изменен заголовок цвет на красный

Invalid Например коммита (текст описания отсутствует, TicketID не в скобках):

dk93jled

Также недействителен (TicketID отсутствует):

Изменен заголовок цвет красный

Также недействительные (нет скобок):

не dk93jled Изменен цвет заголовка до красного


Вопрос:

Как я могу реализовать требования выше? Я чувствую запах регулярных выражений, поэтому, пожалуйста, добавьте полное рабочее регулярное выражение к вашему ответу, потому что я действительно сосать, когда дело доходит до регулярных выражений :-(

Также мне нужны инструкции о том, как добавить это регулярное выражение в Github для работы .

+0

Вам действительно нужно будет указать более подробный формат, потому что на основании вашей спецификации сообщение ** недействительное ** фиксация действительна и имеет: ticketId = 'Changed', description =' headline color to red'. (I.e.«Изменено» соответствует спецификации для идентификатора билета «неограниченное количество букв или цифр»). На самом деле, любой из двух слов фиксации-сообщение (даже если это всего лишь две буквы, разделенные пробелом) соответствует вашим требованиям. – Alderath

+0

@ Алдерат О, хватайте. Вы правы, спасибо! Я исправил это в своем вопросе. – Timo

+1

Я должен верить, что два вопроса (как добавить предварительно совершить крюк и как сочетать произвольную строку в скобках), были независимо друг от друга, _exhaustively_ ответили как на SO и в других местах. – Mathletics

ответ

2

Вы можете предоставить на стороне клиента совершить крюк .git/hooks/commit-msg со следующим кодом:

#!/bin/sh 

check=$(head -1 $1 | egrep '^\[\w*?\]\s(\w+\s?)+$') 
if [ "" = "$check" ]; then 
     echo "Commit message invalid." 1>&2 
     echo "Required format:" 1>&2 
     echo " [ticketid] description" 1>&2 
     exit 1 
fi 

Примечание: Это не будет применять его на разработчиков, которые не добавляют вышеуказанный код на своем репо.

+0

Отличный ответ, спасибо :) – Timo

Смежные вопросы