2011-06-17 4 views
13

Tengo un repositorio central simple en el que un equipo publica (envía) sus confirmaciones. En este repositorio principal, deseo desactivar la eliminación y el cambio de nombre de la etiqueta.Deshabilitar eliminación de etiqueta

¿Hay una solución como un gancho o algo así?

Respuesta

18

git help hooks contiene documentación sobre los ganchos. El gancho update se invoca cuando Git está a punto de crear/mover/eliminar una referencia. Se llama una vez por referencia a actualizarse, y se le da:

  • primera argumento: el nombre de referencia (por ejemplo, refs/etiquetas/v1.0)
  • segundo argumento: SHA1 del objeto donde la referencia actualmente puntos (todos ceros si la referencia no existe actualmente)
  • 3er argumento: SHA1 del objeto donde el usuario quiere la referencia al punto (todos ceros si la referencia se va a eliminar).

Si el gancho sale con un código de salida distinto de cero, git no actualizará la referencia y el usuario recibirá un error.

Así que para hacer frente a su problema particular, se puede añadir lo siguiente a su update gancho:

#!/bin/sh 

log() { printf '%s\n' "$*"; } 
error() { log "ERROR: $*" >&2; } 
fatal() { error "$*"; exit 1; } 

case $1 in 
    refs/tags/*) 
     [ "$3" != 0000000000000000000000000000000000000000 ] \ 
      || fatal "you're not allowed to delete tags" 
     [ "$2" = 0000000000000000000000000000000000000000 ] \ 
      || fatal "you're not allowed to move tags" 
     ;; 
esac 
+1

Es posible que desee vincular a los documentos o explicar más acerca de cómo esto se integra. – Daenyth

+0

@Daenyth: ¡Actualizado, gracias! –

+0

Mucho mejor, +1! – Daenyth

Cuestiones relacionadas