2011-04-27 13 views
25

Me gustaría configurar un gancho git que cree una estructura de directorios de estilo CDN basada en las etiquetas entrantes. Entonces, por ejemplo, si la última etiqueta en el repositorio local es "v1.2.1" y realizo una confirmación con "v1.2.2", debería ver la nueva etiqueta y clonar el repositorio en una nueva directamente (../1.2 .2) en consecuencia.¿Cómo reacciono a las nuevas etiquetas en git hooks?

Estoy bastante seguro de que deseo adjuntar esto a la recepción posterior, sin embargo, no encuentro nada en la documentación sobre git hooks sobre cómo leer las etiquetas entrantes. ¿Se entregan en un gancho diferente? ¿Realmente necesito que el script de shell ejecute un comando git para ver si alguno de los nuevos commits tiene nuevas etiquetas?

Gracias!

Respuesta

30

Las etiquetas son como cualquier otra referencia (como commit).
Si las etiquetas se envían a un repositorio con un post-receive hook, se llamará a ese gancho y se mostrarán todas las referencias actualizadas, es decir, los valores antiguos y nuevos de todos los refs además de sus nombres (en su entrada estándar).

Ver este servidor post-receive email gancho, por ejemplo.

#!/bin/sh 

. $(dirname $0)/functions 

process_ref() { 
    oldrev=$(git rev-parse $1) 
    newrev=$(git rev-parse $2) 
    refname="$3" 

    set_change_type 
    set_rev_types 
    set_describe_tags 

    case "$refname","$rev_type" in 
     refs/tags/*,tag) 
     # annotated tag 
     refname_type="annotated tag" 
     function="atag" 
     short_refname=${refname##refs/tags/} 
     # change recipients 
     if [ -n "$announcerecipients" ]; then 
      recipients="$announcerecipients" 
     fi 
     ;; 
    esac 
} 

while read REF; do process_ref $REF; done 

Para que esto se trabajo también debe instalar desde el repositorio the functions file ejemplo antes mencionado gancho.

+0

'$ 1, $ 2 y $ 3' son nulos para mí cuando presiono una etiqueta. – chovy

+0

@chovy strage. Este script similar (http://www.kaarsemaker.net/blog/2013/10/16/automatically-pushing-local-git-repositories-other-sources/) no tiene el mismo problema. – VonC

+0

Arreglé el ejemplo en la respuesta para que sea un guión bash completo, para aquellos como yo que somos demasiado perezosos para seguir el enlace posterior a la recepción –

Cuestiones relacionadas