Доброе утро всем! Для проекта на Java на github я должен использовать функции github, такие как «issues». Для этого все «коммиты» должны содержать хотя бы один выход. Поэтому, чтобы моя команда не совершала тупиковые коммиты, я должен проверять перед каждым коммитом. GitHooks - идеальный инструмент для этой работы. Только для реализации сценария, совместимого с Windows.

В среде Linux я знаю, как прервать фиксацию, но я не знаю, как получить содержимое фиксации, которое сможет проверить условие.

4
Tristan 18 Окт 2019 в 17:04

1 ответ

Лучший ответ

В общем, хуки Git не подходят для этого случая, потому что пользователь может обойти их с помощью git commit --no-verify (наряду с множеством других методов). Что-либо в системе пользователя не является эффективным элементом управления, поскольку пользователь может изменить или удалить это.

Обычно такое поведение выполняется на стороне сервера. В некоторых случаях вы можете запустить ловушку pre-receive, чтобы проверить эти вещи, но это невозможно на GitHub. Вместо этого вы должны проверить это в своей системе CI в дополнение к другим проверкам, которые вы выполняете.

Вы можете написать сценарий для этого в оболочке, например, так, где два аргумента - это основная ветвь (обычно master) и HEAD фиксации для запроса на вытягивание:

#!/bin/sh -e

git rev-list "$1".."$2" | xargs -L1 sh -c 'git log -1 --format=%b "$@" | grep -E "#[0-9]+"'

Это проверит шаблон #[0-9]+ в сообщении фиксации и завершит работу, отличную от нуля, если он не совпадает. Такой сценарий также будет работать в Windows, если вы вызовете его с помощью bash или sh, поскольку все версии Git в Windows поставляются с некоторой реализацией оболочки.

3
bk2204 18 Окт 2019 в 21:49