2009-11-18 14 views

risposta

40

Impostazione delle variabili di configurazione:

receive.denyNonFastForwards 
receive.denyDeletes 

impedirà qualsiasi 'forzata' spinge di lavorare in tutti i rami.

Se si desidera un controllo pre-branch più preciso, sarà necessario utilizzare un "hook" sul repository remoto, probabilmente il hook "update".

C'è un hook di aggiornamento di esempio chiamato 'update-paranoid' che probabilmente fa ciò che ti serve (e altro) nella distribuzione git nella cartella 'contrib'.

gitweb link

+3

+1 per il gancio (versione grezza: http://git.kernel.org/?p=git/git.git;a=blob_plain;f=contrib/hooks/update-paranoid;hb=080cbc1275ac09445136ba429d90b5ec85e92c1c) – VonC

+4

un modo per farlo per GitHub? –

+0

'update-paranoid' su GitHub: https://github.com/git/git/blob/master/contrib/hooks/update-paranoid – go2null

1

Ho scritto questo libro aggiornamento rapido per impedire gli aggiornamenti non-fast-forward (spinge) sul ramo "dev" in un repository:

#!/bin/sh 

REFNAME=$1 
OLDSHA=$2 
NEWSHA=$3 

if [ "refs/heads/dev" != $REFNAME ]; then 
    exit 0 
fi 

MERGEBASE=$(git merge-base $OLDSHA $NEWSHA) 
if [ $OLDSHA = $MERGEBASE ]; then 
    exit 0 
fi 

echo "Not a fast-forward on branch dev" 
exit 1 
0

Github ha già introdotto il concetto di rami protetti!

Si trova sotto Settings -> Branches -> Protected Branches. La funzionalità è ora disponibile per tutti gli utenti, non solo per le aziende!

Questa "protezione" può essere abilitata per qualsiasi ramo e per qualsiasi utente, inclusi gli amministratori.

Maggiori dettagli qui - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

Quindi non occorrono altre ganci e di codice arbitrario.