2011-06-17 24 views
13

Mam centralne repozytorium, w którym zespół publikuje (push) ich zatwierdzenia. W tym głównym repozytorium chcę wyłączyć usuwanie tagu i zmianę jego nazwy.Wyłącza usuwanie znaczników

Czy istnieje rozwiązanie takie jak hak lub coś takiego?

Odpowiedz

18

git help hooks zawiera dokumentację na temat haków. Hak update jest wywoływany, gdy Git ma zamiar utworzyć/przesunąć/usunąć referencję. Nazywa się raz w odniesieniu do aktualizacji i podano:

  • 1-ty argumentu: Nazwa odniesienia (np bibl/tagów/v1.0)
  • argument 2: SHA1 obiektu, gdzie odniesienie obecnie punkty (wszystkie zera, jeśli referencja nie istnieje)
  • Trzeci argument: SHA1 obiektu, w którym użytkownik chce odnieść się do punktu (wszystkie zera, jeśli odniesienie ma zostać usunięte).

Jeśli hak wyjdzie z niezerowym kodem wyjścia, git nie zaktualizuje referencji, a użytkownik otrzyma błąd.

więc do rozwiązania konkretnego problemu, można dodać następujące haka update:

#!/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

może chcesz połączyć z docs lub wyjaśnić więcej o tym, jak to integruje. – Daenyth

+0

@ Daenyth: Zaktualizowano, dziękuję! –

+0

O wiele ładniej, +1! – Daenyth