Este é meu gancho atual em um repositório vazio que reside no servidor da empresa:
git push origin master
Este gancho empurra para Assembla. O que eu preciso é enviar apenas um branch (master, idealmente) quando alguém enviar alterações para aquele branch em nosso servidor e ignorar os push para outros branches. É possível selecionar o branch de um repositório simples e enviar apenas esse branch para o Assembla?
git
repository
hook
git-bare
Jorge Guberte
fonte
fonte
git push origin master
irá apenas enviar omaster
branch para oorigin
remoto, que suponho que esteja definido como Assembla. Você está dizendo que precisa acionar o gancho apenas quando alguém empurramaster
, em vez defeature1
ou algo assim?Respostas:
Um gancho pós-recebimento obtém seus argumentos de stdin, no formulário
<oldrev> <newrev> <refname>
. Visto que esses argumentos vêm de stdin, não de um argumento de linha de comando, você precisa usar emread
vez de$1 $2 $3
.O gancho pós-recebimento pode receber vários ramos de uma vez (por exemplo, se alguém fizer um
git push --all
), portanto, também precisamos envolvê-loread
em umwhile
loop.Um snippet de trabalho é semelhante a este:
fonte
#!/bin/sh
vez de#!/bin/bash
?refs/heads/master
invés derefs/tags/master
você, tudo bem. Pode haver outros casos extremos como este, mas não consigo pensar. Pode ser uma boa pergunta sobre StackOverflow por si só.if branch=$(git rev-parse --symbolic --abbrev-ref $refname 2>/dev/null); then
para que o git não reclame quando removo um branch.O último parâmetro que um gancho pós-recebimento obtém em stdin é o que foi alterado, portanto, podemos usá-lo para verificar se esse valor era "refs / heads / master". Um pouco de rubi semelhante ao que uso em um gancho pós-recebimento:
Observe que ele obtém uma linha para cada ref que foi empurrado, então se você empurrou mais do que apenas o mestre, ainda funcionará.
fonte
A resposta de Stefan não funcionou para mim, mas este fez:
fonte
Nenhuma das soluções acima funcionou para mim. Depois de muita, muita depuração, descobriu-se que usar o comando 'ler' não funciona - em vez disso, a análise de argumentos de linha de comando da maneira usual funciona bem.
Aqui está o gancho pós-atualização exato que testei com sucesso agora no CentOS 6.3.
ATUALIZAÇÃO: em uma nota ainda mais estranha, o gancho de pré-recepção recebe sua entrada via stdin, portanto, lê com 'ler' (uau, nunca pensei que diria isso). O gancho pós-atualização ainda funciona com $ 1 para mim.
fonte
post-receive
ganchos, não parapost-update
ganchos. Eles recebem suas opiniões de maneiras diferentes.post-receive
leva stdin conforme indicado aqui: git-scm.com/book/en/v2/Customizing-Git-Git-HooksA resposta de @pauljz funciona bem para certos git hooks como
pre-push
, maspre-commit
não tem acesso a essas variáveisoldrev newrev refname
Então eu criei esta versão alternativa que funciona para pré-commit, ou realmente e hook. Este é um
pre-commit
gancho que executará umhusky
script se NÃO estivermos nomaster
ramo.Espero que ajude alguém. Você pode modificar facilmente de acordo com suas necessidades, qualquer coisa entre as instruções
if
efi
.fonte
Eu mesmo escrevi um script PHP para fazer essa funcionalidade.
https://github.com/fotuzlab/githubdump-php
Hospede esse arquivo em seu servidor, de preferência repo root e defina a url nos webhooks do github. Altere 'allcommits' na linha 8 com o nome do seu ramo e adicione seu código / função na linha 18.
por exemplo
fonte
Abordagem simples, por
git hook
escritoSimples - mais informações sobre este ótimo sistema de link hooking
fonte