Aquí está mi gancho actual en un repositorio vacío que vive en el servidor de la compañía: git push origin master
Este gancho
empuja a Assembla. Lo que necesito es empujar solo una rama (maestra, idealmente) cuando alguien empuja cambios a esa rama en nuestro servidor e ignorar los empujes a otras ramas. ¿Es posible seleccionar la rama de un repositorio simple y enviar solo esa rama a Assembla?
git
repository
hook
git-bare
Jorge Guberte
fuente
fuente
git push origin master
solo empujará lamaster
rama hacia elorigin
control remoto, que supongo que se define como Assembla. ¿Estás diciendo que necesitas activar el gancho solo cuando alguien presionamaster
, en lugar defeature1
, o algo así?Respuestas:
Un gancho posterior a la recepción obtiene sus argumentos de stdin, en la forma
<oldrev> <newrev> <refname>
. Dado que estos argumentos provienen de stdin, no de un argumento de línea de comando, debe usar enread
lugar de$1 $2 $3
.El gancho posterior a la recepción puede recibir varias ramas a la vez (por ejemplo, si alguien hace a
git push --all
), por lo que también debemos envolverloread
en unwhile
bucle.Un fragmento de trabajo se parece a esto:
fuente
#!/bin/sh
lugar de#!/bin/bash
?refs/heads/master
lugar derefs/tags/master
usted debería estar bien. Sin embargo, puede haber otros casos extremos como este en los que no puedo pensar. Podría ser una buena pregunta de StackOverflow por derecho propio.if branch=$(git rev-parse --symbolic --abbrev-ref $refname 2>/dev/null); then
para que git no se queje cuando elimino una rama.El último parámetro que obtiene un gancho posterior a la recepción en stdin es qué se cambió ref, por lo que podemos usarlo para verificar si ese valor era "refs / heads / master". Un poco de rubí similar al que uso en un gancho posterior a la recepción:
Tenga en cuenta que obtiene una línea por cada ref que se presionó, por lo que si presionó más que solo master, seguirá funcionando.
fuente
La respuesta de Stefan no funcionó para mí, pero esto sí:
fuente
Ninguna de las soluciones anteriores funcionó para mí. Después de mucha, mucha depuración, resulta que usar el comando 'leer' no funciona; en cambio, analizar los argumentos de la línea de comando de la forma habitual funciona bien.
Aquí está el gancho posterior a la actualización exacto que acabo de probar con éxito ahora en CentOS 6.3.
ACTUALIZACIÓN: en una nota aún más extraña, el gancho de pre-recepción toma su entrada a través de stdin, por lo tanto, lea con 'leer' (wow, nunca pensé que diría eso). El gancho posterior a la actualización todavía funciona con $ 1 para mí.
fuente
post-receive
ganchos, no parapost-update
ganchos. Reciben sus aportes de diferentes formas.post-receive
toma stdin como se indica aquí: git-scm.com/book/en/v2/Customizing-Git-Git-HooksLa respuesta de @pauljz funciona bien para ciertos ganchos de git como
pre-push
, peropre-commit
no tiene acceso a esas variablesoldrev newrev refname
Así que creé esta versión alternativa que funciona para la confirmación previa, o realmente y enganchar. Este es un
pre-commit
gancho que ejecutará unhusky
script si NO estamos en lamaster
rama.Espero que ayude a alguien. Puede modificar fácilmente según sus necesidades, cualquier cosa entre las declaraciones
if
yfi
.fuente
Había escrito un script PHP para mí mismo para hacer esta funcionalidad.
https://github.com/fotuzlab/githubdump-php
Aloje este archivo en su servidor, preferiblemente la raíz del repositorio y defina la URL en los webhooks de github. Cambie 'allcommits' en la línea 8 con el nombre de su sucursal y agregue su código / función en la línea 18.
p.ej
fuente
Enfoque simple, por
git hook
escritoSimple: más información sobre este excelente sistema de enlace de enlaces
fuente