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 mastersolo empujará lamasterrama hacia elorigincontrol 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 enreadlugar 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 envolverloreaden unwhilebucle.Un fragmento de trabajo se parece a esto:
fuente
#!/bin/shlugar de#!/bin/bash?refs/heads/masterlugar derefs/tags/masterusted 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); thenpara 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-receiveganchos, no parapost-updateganchos. Reciben sus aportes de diferentes formas.post-receivetoma 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-commitno tiene acceso a esas variablesoldrev newrev refnameAsí que creé esta versión alternativa que funciona para la confirmación previa, o realmente y enganchar. Este es un
pre-commitgancho que ejecutará unhuskyscript si NO estamos en lamasterrama.Espero que ayude a alguien. Puede modificar fácilmente según sus necesidades, cualquier cosa entre las declaraciones
ifyfi.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 hookescritoSimple: más información sobre este excelente sistema de enlace de enlaces
fuente