Gerencie ganchos git facilmente na configuração do seu compositor. Esta ferramenta de linha de comando facilita a implementação de um uso consistente de ganchos git em todo o projeto. A especificação de ganchos no arquivo compositor os torna disponíveis para todos os membros da equipe do projeto. Isso fornece um ambiente e comportamento consistentes para todos, o que é ótimo. Também é possível gerenciar globalmente ganchos git para cada repositório em seu computador. Dessa forma, você terá um conjunto confiável de ganchos feitos por você mesmo para cada projeto que escolher trabalhar.
Adicione uma seção hooks
à seção extra
do seu composer.json
e adicione os ganchos lá.
{
"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"
"..." : "..."
}
}
}
Então instale com
composer require --dev brainmaestro/composer-git-hooks
Isso instala o binário cghooks
na pasta vendor/bin
. Se esta pasta não estiver em seu caminho, você precisará preceder cada comando com vendor/bin/
.
Nota: ganchos declarados nos scripts
ou seções raiz de hooks
do composer.json
não são mais suportados na v3.
Você também pode instalá-lo globalmente. Isso parece muito mais natural quando cghooks
é usado com o suporte recém-adicionado para gerenciamento de git hooks globais.
composer global require --dev brainmaestro/composer-git-hooks
Todos os comandos possuem suporte global (além de testar os hooks. Ainda requer estar no diretório com o arquivo composer.json
).
Quando um gancho é uma sequência de comandos, pode ser útil interromper a execução quando um comando falhar.
Especifique os ganchos impactados na seção de configuração stop-on-failure
.
{
"extra" : {
"hooks" : {
"config" : {
"stop-on-failure" : [ " pre-push " ]
},
"pre-push" : [
" php-cs-fixer fix --dry-run --stop-on-violation . " ,
" phpunit "
],
}
}
}
Certifique-se sempre de executar o comando de atualização após alterar a seção de configuração stop-on-failure
.
Ganchos personalizados podem ser adicionados ao array custom-hooks
da seção `config.
{
"extra" : {
"hooks" : {
"config" : {
"custom-hooks" : [ " pre-flow-feature-start " ]
},
"pre-flow-feature-start" : [
" echo 'Starting a new feature...' "
]
}
}
}
Certifique-se sempre de executar o comando de atualização após alterar a seção de configuração custom-hooks
. Nota: config
não é um valor de gancho personalizado válido.
Adicione um script cghooks
à seção scripts
do seu arquivo composer.json
. Dessa forma, os comandos podem ser executados com composer cghooks ${command}
. Isso é ideal se você preferir não editar o caminho do sistema.
{
"scripts" : {
"cghooks" : " vendor/bin/cghooks " ,
"..." : " ... "
}
}
Adicione os seguintes eventos ao seu arquivo composer.json
. Os comandos cghooks
serão executados sempre que os eventos ocorrerem. Vá para Eventos de comando do Composer para obter mais detalhes sobre o sistema de eventos do compositor.
{
"scripts" : {
"post-install-cmd" : " cghooks add --ignore-lock " ,
"post-update-cmd" : " cghooks update " ,
"..." : " ... "
}
}
Todos os comandos a seguir devem ser executados na mesma pasta do arquivo composer.json
ou especificando a opção --git-dir
para apontar para uma pasta com um arquivo composer.json
.
Após a conclusão da instalação, execute cghooks add
para adicionar todos os git hooks válidos que foram especificados na configuração do compositor.
Opção | Descrição | Comando |
---|---|---|
no-lock | Não crie um arquivo de bloqueio | cghooks add --no-lock |
ignore-lock | Adicione o arquivo de bloqueio a .gitignore | cghooks add --ignore-lock |
force-win | Forçar a compatibilidade do Windows Bash | cghooks add --force-win |
O arquivo lock
contém uma lista de todos os ganchos adicionados.
Se o sinalizador --global
for usado, os ganchos serão adicionados globalmente e a configuração global do git também será modificada. Se nenhum diretório for fornecido, haverá um retorno para o core.hooksPath
atual na configuração global. Se esse valor não for definido, o padrão é $COMPOSER_HOME
(este substituto específico só acontece para o comando add
). Ele falhará com um erro se ainda não houver caminho após os fallbacks.
O comando update que é executado com cghooks update
basicamente ignora o arquivo de bloqueio e tenta adicionar ganchos do arquivo compositor. Isso é semelhante ao que a opção --force
do comando add
fez. Este comando é útil se os ganchos no arquivo composer.json
foram alterados desde a primeira vez que os ganchos foram adicionados.
Isto funciona de forma semelhante quando usado com --global
exceto que não há fallback para $COMPOSER_HOME
se nenhum diretório for fornecido.
Os ganchos podem ser facilmente removidos com cghooks remove
. Isso removerá todos os ganchos especificados na configuração do compositor.
Os ganchos também podem ser removidos passando-os como argumentos. O comando cghooks remove pre-commit post-commit
que removerá os ganchos pre-commit
e post-commit
.
Opção | Descrição | Comando |
---|---|---|
force | Exclua ganchos sem verificar o arquivo de bloqueio | cghooks remove --force |
CUIDADO : Se o arquivo de bloqueio foi adulterado ou a opção force foi usada, os ganchos que já existiam antes de usar este pacote, mas foram especificados na configuração dos scripts do compositor, também serão removidos. Ou seja, se você tinha um gancho pre-commit
anterior, mas sua configuração atual do compositor também possui um gancho pre-commit
, esta opção fará com que o comando remova seu gancho inicial.
Isso também não tem um substituto para $COMPOSER_HOME
se nenhum diretório for fornecido quando usado com --global
.
Os ganchos podem ser listados com o comando cghooks list-hooks
. Isso basicamente verifica a configuração do compositor e lista os ganchos que realmente possuem arquivos.
As opções a seguir são comuns a todos os comandos.
Opção | Descrição | Comando |
---|---|---|
git-dir | Caminho para o diretório git | cghooks ${command} --git-dir='/path/to/.git' |
lock-dir | Caminho para bloquear o diretório de arquivos | cghooks ${command} --lock-dir='/path/to/lock' |
global | Executa o comando especificado globalmente | cghooks ${command} --global |
Cada comando também possui um sinalizador -v
para controlar o detalhamento de logs mais detalhados. Atualmente, apenas um nível é suportado.
Os ganchos podem ser testados com cghooks ${hook}
antes de adicioná-los. Exemplo cghooks pre-commit
executa o gancho pre-commit
.
Consulte CONTRIBUINDO para obter detalhes.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.