Укажите номер билета с помощью git commit hooks?
Итак, моя ветка названа в честь номера бигтрекера, что-то вроде "issue-1234", и у нас есть соглашение о том, чтобы всегда записывать номер билета в сообщении фиксации. Мне интересно, можно ли автоматически добавить номер билета в сообщение фиксации, когда я работаю над веткой "вопрос", без явного ввода ее.
Я просмотрел git фиксации фиксации, а именно pre-commit, prepare-message и post-commit, и никто из них, похоже, не может делать то, что я хотел. Крюк после фиксации близок, но вы не можете изменить сообщение, которое было выполнено с помощью -m.
Повторяю, мне интересно, возможно ли это:
В ветке: issue-1234
git commit -a -m"fixed this pesky issue"
После фиксации в журнале git он отображает сообщение как:
fixed this pesky issue. ticket number: #1234
Ответы
Ответ 1
Вы пропустили крючок. Вы хотите commit-msg
:
Этот hook вызывается git commit и может быть обойден с помощью опции -no-verify. Он принимает один параметр, имя файла, в котором содержится предлагаемое сообщение журнала фиксации. Выход с ненулевым состоянием приводит к прерыванию git commit.
Итак, например:
#!/bin/sh
ticket=$(git symbolic-ref HEAD | awk -F- '/^issue-/ {print $2}')
if [ -n "$ticket" ]; then
echo "ticket #$ticket" >> $1
fi
Это очень наивный синтаксический разбор имени вашей ветки, и он просто добавляется к сообщению фиксации в собственной строке. Измените это, если это не достаточно для вас.
Конечно, я бы рекомендовал сделать это в prepare-commit-msg
и совершить с git commit
(без -m
). Очень, очень редко, что вы можете написать достаточную информацию в однострочном сообщении фиксации. Кроме того, это позволит вам увидеть сообщение до совершения совершения, если ваш крючок не делает то, что вы хотите.
Ответ 2
Вы можете использовать prepare-commit-msg
hook, который принимает больше параметров, чем commit-msg
. Затем вы можете проверить, поступает ли сообщение из файла, шаблона и т.д., Чтобы не добавлять номера проблем, когда вы этого не хотите.
Со следующим script в .git/hooks/prepare-commit-msg
, когда вы работаете в ветки функции с именем foo-123
, тогда [#123]
будет добавлен в третью строку каждого сделанного вами коммита.
Дополнительная информация в этом сообщении я написал
#!/bin/sh
if [ x = x${2} ]; then
BRANCH_NAME=$(git symbolic-ref --short HEAD)
STORY_NUMBER=$(echo $BRANCH_NAME | sed -n 's/.*-\([0-9]\)/\1/p')
if [ x != x${STORY_NUMBER} ]; then
sed -i.back "1s/^/\n\n[#$STORY_NUMBER]/" "$1"
fi
fi
Ответ 3
Другой вариант - использовать git notes
, чтобы добавить информацию о номере билета в фиксацию, используя один о крючках, которые вы упомянули.
(См. "Заметки для себя" запись в блоге для получения дополнительной информации о механизме заметок)
Ответ 4
Таким образом вы можете добавить название ветки в начало сообщения фиксации. Подготовить-commit-msg.
Работайте как для команд git commit -m ", так и" git commit ". Параметр - файл .git/hooks/pre-commit.skip, который содержит список ветвей, которые вы не хотите автоматически добавлять.
BRANCH="$(git rev-parse --abbrev-ref HEAD)"
FILE_CONTENT="$(cat $1)"
skip_list=`git rev-parse --git-dir`"/hooks/pre-commit.skip"
if grep -E "^$BRANCH$" $skip_list; then
exit
fi
if [ $2 = "message" ]; then
echo $BRANCH: $FILE_CONTENT > $1
else
echo $BRANCH: > $1
echo $FILE_CONTENT >> $1
fi