В идеале хуки должны быть написаны на bash, если вы следуете за примерами файлов. Но вы можете написать его на любом доступном языке и просто убедиться, что он имеет исполняемый флаг.
Таким образом, вы можете написать код Python или Go для достижения ваших целей и поместить его в папку «ловушки». Это будет работать, но не будет управляться вместе с хранилищем.
Два варианта
а) мультискрипты
Вы можете закодировать свои хуки внутри вашей справки и добавить небольшой фрагмент кода в хуки, чтобы вызвать свой идеальный скрипт, например так:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
б) один сценарий
Более крутой вариант - добавить только один скрипт, чтобы управлять ими всеми, вместо нескольких. Итак, вы создаете hooks / mysuperhook.go и указываете на него все нужные вам крючки.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Параметр предоставит вашему скрипту, какой хук был запущен, и вы можете различить его внутри своего кода. Зачем? Иногда, возможно, вы захотите выполнить одну и ту же проверку для коммита и толчка, например.
А потом?
Затем вы можете захотеть иметь дополнительные функции, такие как:
- Нажмите крючок вручную, чтобы проверить, все ли в порядке, даже до фиксации или нажатия. Если вы просто позвоните своему сценарию (вариант a или b), то добьетесь цели.
- Запускайте ловушки для CI, поэтому вам не нужно переписывать те же проверки для CI, это будет, например, просто вызывать триггеры commit и push. То же самое, что и выше, должно решить.
- Вызовите внешние инструменты, такие как валидатор уценки или валидатор YAML. Вы можете делать системные вызовы и должны обрабатывать STDOUT и STDERR.
- Убедитесь, что у всех разработчиков есть простой способ установки хуков, поэтому нужно добавить хороший скрипт в репозиторий, чтобы заменить хуки по умолчанию правильными
- Иметь глобальных помощников, таких как проверка для блокировки коммитов для разработки и мастеринга веток, без необходимости добавлять их в каждый репозиторий. Вы можете решить эту проблему, имея другой репозиторий с глобальными скриптами.
Может ли это быть проще?
Да, есть несколько инструментов, которые помогут вам управлять git-hooks. Каждый из них предназначен для решения проблемы с разных точек зрения, и вам может понадобиться понять все из них, чтобы получить тот, который лучше всего подходит для вас или вашей команды. GitHooks.com предлагает много чтения о подключении и несколько инструментов, доступных сегодня.
На сегодняшний день там перечислены 21 проект с различными стратегиями управления git-хуками. Некоторые делают это только для одного хука, некоторые для определенного языка и так далее.
Один из этих инструментов, написанный мной и предложенный бесплатно как проект с открытым исходным кодом, называется hooks4git . Он написан на Python (потому что он мне нравится), но идея состоит в том, чтобы обрабатывать все элементы, перечисленные выше, в одном файле конфигурации с именем .hooks4git.ini, который находится внутри вашего репозитория и может вызывать любой скрипт, который вы хотите вызвать, на любом языке. ,
Использование git-хуков абсолютно фантастично, но то, как они предлагаются, обычно только отвлекает людей от этого.