Прервать фиксацию, если нужно сделать в коде, за исключением случаев, когда в сообщении о фиксации обнаружена незавершенная работа.

Мне нужно, чтобы git прервал коммиты, содержащие todo, за исключением случаев, когда в сообщении коммита указан текст «работа в процессе».

Нет ли способа получить доступ к сообщению фиксации в хуке перед фиксацией, учитывая, что я всегда предоставляю его через опцию -m, что означает, что оно должно быть доступно для всех доступных git-хуков?

Если нет, то как мне быть?


person smarber    schedule 12.05.2016    source источник
comment
Не в хуке pre-commit, но вы можете попробовать хук commit-msg — см. здесь: git-scm.com/book/en/v2/   -  person 1615903    schedule 12.05.2016


Ответы (1)


Как 1615903 отмечено в комментарии, вам нужно будет использовать крючок commit-msg.

Мне нужно, чтобы git прервал коммиты, содержащие todo, за исключением случаев, когда в сообщении коммита указан текст «работа в процессе».

Вы не определили здесь «содержащие задачи», но давайте все равно попробуем:

#! /bin/sh
# commit-msg hook: if "work in progress" is included, allow anything,
# otherwise require that no line adds the word "todo" anywhere.
#
# Note that this will forbid a commit that includes a text file
# or comment saying that you should not include the word "todo"
# in your commits!
grep "work in progress" "$1" >/dev/null && exit 0 # allow
git diff --cached | grep '^+.*todo' >/dev/null && {
    echo "commit aborted: found \"todo\" without \"work in progress\"" 1>&2
    exit 1 # forbid
}
exit 0 # test passed, allow

Примечание: это полностью не проверено.

person torek    schedule 13.05.2016