Подтвердить что ты не робот

Укажите номер билета с помощью 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
4b9b3361

Ответ 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