Легко управляйте git-хуками в конфигурации вашего композитора. Этот инструмент командной строки позволяет легко реализовать единообразное использование перехватчиков git в рамках всего проекта. Указание перехватчиков в файле композитора делает их доступными для каждого члена команды проекта. Это обеспечивает единообразную среду и поведение для всех, и это здорово. Также можно использовать глобальное управление git-хуками для каждого репозитория на вашем компьютере. Таким образом, у вас будет надежный набор крючков, созданный вами самостоятельно для каждого проекта, над которым вы решите работать.
Добавьте раздел hooks в extra раздел вашего composer.json и добавьте перехватчики туда.
{
"extra" : {
"hooks" : {
"pre-commit" : [
"echo committing as $(git config user.name)" ,
"php-cs-fixer fix ." // fix style
] ,
// verify commit message. ex: ABC-123: Fix everything
"commit-msg" : "grep -q '[A-Z]+-[0-9]+.*' $1" ,
"pre-push" : [
"php-cs-fixer fix --dry-run ." // check style
"phpunit"
] ,
"post-merge" : "composer install"
"..." : "..."
}
}
}Затем установите с помощью
composer require --dev brainmaestro/composer-git-hooks Это установит двоичный файл cghooks в папку vendor/bin . Если этой папки нет в вашем пути, вам нужно будет начинать каждую команду с vendor/bin/ .
Примечание: хуки, объявленные в scripts или корневых разделах hooks composer.json больше не поддерживаются в версии 3.
Вы также можете установить его глобально. Это кажется гораздо более естественным, когда используется cghooks с недавно добавленной поддержкой управления глобальными git-хуками.
composer global require --dev brainmaestro/composer-git-hooks Все команды имеют глобальную поддержку (кроме тестирования хуков. Все равно требуется находиться в каталоге с файлом composer.json ).
Когда ловушка представляет собой последовательность команд, может быть полезно остановить выполнение в случае сбоя команды.
Укажите затронутые перехватчики в разделе конфигурации stop-on-failure .
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
} Всегда обязательно запускайте команду обновления после изменения раздела конфигурации stop-on-failure .
Пользовательские перехватчики могут быть добавлены в массив custom-hooks раздела `config.
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
} Всегда обязательно запускайте команду обновления после изменения раздела конфигурации custom-hooks . Примечание. config не является допустимым значением пользовательского хука.
Добавьте скрипт cghooks в раздел scripts вашего файла composer.json . Таким образом, команды можно запускать с помощью composer cghooks ${command} . Это идеальный вариант, если вы не хотите редактировать системный путь.
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
} Добавьте следующие события в файл composer.json . Команды cghooks будут выполняться каждый раз, когда происходят события. Перейдите в раздел «События команд Composer» для получения более подробной информации о системе событий композитора.
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
} Все следующие команды необходимо запускать либо в той же папке, что и ваш файл composer.json , либо указав параметр --git-dir , чтобы указать папку с файлом composer.json .
После завершения установки запустите cghooks add , чтобы добавить все действительные перехватчики git, указанные в конфигурации композитора.
| Вариант | Описание | Команда |
|---|---|---|
no-lock | Не создавайте файл блокировки | cghooks add --no-lock |
ignore-lock | Добавьте файл блокировки в .gitignore. | cghooks add --ignore-lock |
force-win | Принудительная совместимость с Windows Bash | cghooks add --force-win |
Файл lock содержит список всех добавленных хуков.
Если используется флаг --global , хуки будут добавлены глобально, а глобальная конфигурация git также будет изменена. Если каталог не указан, в глобальной конфигурации есть резервный вариант к текущему core.hooksPath . Если это значение не установлено, по умолчанию оно равно $COMPOSER_HOME (этот конкретный резервный вариант применяется только для команды add ). Он завершится ошибкой, если после резервного копирования все еще нет пути.
Команда обновления, запускаемая с помощью cghooks update в основном игнорирует файл блокировки и пытается добавить перехватчики из файла композитора. Это похоже на то, что делает опция --force для команды add . Эта команда полезна, если перехватчики в файле composer.json изменились с момента их первого добавления.
Это работает аналогично при использовании с --global за исключением того, что нет возврата к $COMPOSER_HOME если каталог не указан.
Крючки можно легко удалить с помощью cghooks remove . Это удалит все хуки, указанные в конфигурации композитора.
Хуки также можно удалить, передав их в качестве аргументов. Команда cghooks remove pre-commit post-commit , которая удаляет перехватчики pre-commit и post-commit .
| Вариант | Описание | Команда |
|---|---|---|
force | Удаление перехватчиков без проверки файла блокировки | cghooks remove --force |
ВНИМАНИЕ : если файл блокировки был подделан или была использована опция Force, перехватчики, которые уже существовали до использования этого пакета, но были указаны в конфигурации скриптов композитора, также будут удалены. То есть, если у вас был предыдущий хук pre-commit , но ваша текущая конфигурация композитора также имеет хук pre-commit , эта опция заставит команду удалить ваш начальный хук.
Это также не имеет запасного варианта $COMPOSER_HOME , если при использовании с --global не указан каталог.
Крючки можно просмотреть с помощью команды cghooks list-hooks . По сути, это проверяет конфигурацию композитора и выводит список перехватчиков, которые действительно имеют файлы.
Следующие параметры являются общими для всех команд.
| Вариант | Описание | Команда |
|---|---|---|
git-dir | Путь к каталогу git | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | Путь для блокировки каталога файлов | cghooks ${command} --lock-dir='/path/to/lock' |
global | Запускает указанную команду глобально | cghooks ${command} --global |
Каждая команда также имеет флаг -v для управления подробностями для более подробных журналов. В настоящее время поддерживается только один уровень.
Хуки можно протестировать с помощью cghooks ${hook} перед их добавлением. Пример cghooks pre-commit запускает перехватчик pre-commit .
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.