Как упоминалось, вы можете использовать git хуки для управления сообщением фиксации.
Я не верю, что могу использовать любой из них, поскольку мне нужно, чтобы пользователь ввел сообщение.
Хук commit-msg
срабатывает после того, как пользователь записывает сообщение и выходит из редактора, но до совершения фиксации.
На githooks
странице руководства:
commit-msg
This hook is invoked by git-commit(1) and git-merge(1), and can be
bypassed with the --no-verify option. It takes a single parameter, the
name of the file that holds the proposed commit log message. Exiting
with a non-zero status causes the command to abort.
The hook is allowed to edit the message file in place, and can be used
to normalize the message into some project standard format. It can also
be used to refuse the commit after inspecting the message file.
The default commit-msg hook, when enabled, detects duplicate
"Signed-off-by" lines, and aborts the commit if one is found.
Итак, чтобы заменить заголовок сообщения, вы можете использовать что-то вроде этого:
#!/bin/sh
file="$1"
ticket_id="$(sed -E -ne '1s/^#([0-9]+)/\1/p' <"$file")"
ticket_title="$(call_my_api "ticket_id")"
sed -i.bak -e "1s/.*/#$ticket_id $ticket_title/" "$file"
Примечание: суффикс (например, .bak) необходим для переносимости.
Несмотря на то, что это работает, я бы не рекомендовал этого, или, когда вы просите обзор ветки, git log --oneline
даст вам следующее:
#123 Foo is returning error 418
#123 Foo is returning error 418
#123 Foo is returning error 418
#123 Foo is returning error 418
#123 Foo is returning error 418
Это было бы особенно плохо для ветки с десятками коммитов, связанных с одним тикетом.
Вместо этого вы можете оставить заголовок сообщения фиксации, чтобы описать , что фиксация делает, и просто добавьте заголовок заявки в конец сообщения:
#!/bin/sh
file="$1"
ticket_id="$(sed -E -ne '1s/^#\[([0-9]+)\]/\1/p' <"$file")"
ticket_title="$(call_my_api "ticket_id")"
printf -- '\n%s\n' "$ticket_title" >>"$file"
Наша команда обычно использует часть заголовка заявки в теле сообщения фиксации, чтобы добавить контекст, и это работает достаточно хорошо.
Обновление: обнаружена аналогичная попытка (но вместо этого на основе имени ветки):
Как предоставить подготовленное сообщение коммита git?
person
kelvin
schedule
05.08.2018