Легко управляйте 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). Дополнительную информацию см. в файле лицензии.