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

Получить сообщение фиксации в git hook

Я хочу проверить сообщение commit до git commit. Я использую pre-commit hook для этого, но не смог найти способ получить сообщение фиксации в .git/pre-commit script. Как я мог его получить?

4b9b3361

Ответ 1

В хуке pre-commit сообщение о фиксации обычно еще не было создано ¹. Вы, вероятно, хотите вместо этого использовать один из prepare-commit-msg или commit-msg. В Pro Git есть хороший раздел о порядке запуска этих хуков и о том, что вы обычно можете с ними делать.

¹ Исключением является то, что -m, возможно, предоставил сообщение коммита с -m, но сообщение все еще не доступно для ловушки pre-commit, тогда как оно должно prepare-commit-msg или commit-msg

Ответ 2

Я реализовал это в тэге commit-msg. См. документация.

commit-msg
This hook is invoked by git commit, 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 git commit to abort.

В my_git_project/.git/hooks я добавил этот файл commit.msg (должно быть это имя). Я добавил следующее содержимое bash внутри этого файла, который сделал проверку.

#!/usr/bin/env bash
INPUT_FILE=$1
START_LINE=`head -n1 $INPUT_FILE`
PATTERN="^(MYPROJ)-[[:digit:]]+: "
if ! [[ "$START_LINE" =~ $PATTERN ]]; then
  echo "Bad commit message, see example: MYPROJ-123: commit message"
  exit 1
fi

Ответ 3

Имя крючка должно быть:

commit-msg, иначе он не будет вызван:

Ответ 4

Вы можете сделать следующее в pre-receive hook (для сервера), и на нем будет отображаться информация о ревизии.

old, new, branch = sys.stdin.read().split()
proc = subprocess.Popen(["git", "rev-list", "--oneline","--first-parent" , "%s..%s" %(old, new)], stdout=subprocess.PIPE)
commitMessage=str(proc.stdout.readlines()[0])