Включение текущего имени ветки в шаблон фиксации

У меня есть шаблон фиксации для git, и я хотел бы включить в него имя текущей ветки. Я обычно настраивал ветвь на идентификатор ошибки, и это помогло бы мне заполнить шаблон, например:

Bug : $BUG

Как я могу выполнить такую ​​замену с шаблоном комментариев git?

Ответ 1

Я бы просто использовал prepare-commit-msg, чтобы добавить это в файл. Из (связанной) manpage:

Этот крюк вызывается git commit сразу после подготовки сообщения журнала по умолчанию и перед запуском редактора.

Требуется от одного до трех параметров. Первый - это имя файла, содержащего сообщение журнала фиксации. Второй является источником сообщения о фиксации... [сообщение, шаблон, слияние, сквош или фиксация]...

Если статус выхода не равен нулю, git commit будет прерван.

Целью крюка является редактирование файла сообщения на месте...

Вы можете получить текущую ветвь с git symbolic-ref HEAD.

Вы можете просто обойти шаблоны в целом, и у вас есть hook preend/insert/append имя ветки. Простейший случай, добавление, script - это просто строка shebang, затем git symbolic-ref HEAD >> "$1". Используйте свой любимый метод, если вы хотите его встроить - наиболее читаемый, чтобы отложить оригинал в сторону, написать и добавить, но метод, связанный в комментариях, тоже работает.

Если вы предпочитаете использовать шаблон с заполнителями, вы можете просто сделать что-то вроде sed -i "s/Bug : \$BUG/BUG : $(git symbolic-ref HEAD)/" "$1". Я уверен, вы можете представить себе множество других вариантов.

Возможно, вы захотите подавить это поведение для некоторых типов коммитов (этот второй аргумент) или даже включить его, только если второй аргумент является "шаблоном", если вы используете подход подстановки шаблонов.

Ответ 2

Решение с использованием git псевдонима, но без шаблона:

$ git config --global alias.com '!sh -c "bug=`git symbolic-ref HEAD|sed s#refs/heads/##`; git commit -em \"BUG: \${bug}\""'
$ git com

Ответ 3

Просто собрав комментарии от Джефоми, я получаю что-то вроде этого. Конечно, это может быть более жестким (если бы я знал, что я делаю):

tempFile='/tmp/git-commit-template'
git config commit.template "$tempFile"
rm $tempFile
branch=$(git symbolic-ref HEAD|sed s#refs/heads/##) exec 3<> "$tempFile" && awk -v TEXT="[$branch]" 'BEGIN {print TEXT}{print}' "$tempFile" >&3
git add .
git commit -a