2013-10-30 11 views
5

Stiamo utilizzando un hook post-ricezione in Git per distribuire un'app "PHP". Lo script (Bash) controlla il nome del ramo e fa un rsync sul server corretto in base a un prefisso nel nome del ramo.Git: non chiamare il gancio post-ricezione quando si elimina un ramo

Questo funziona piuttosto bene, tranne che per una cosa: prova a fare una distribuzione quando cancelliamo un ramo.

Ho controllato in molti posti e non ho trovato un modo per scoprire dallo script se l'operazione è una cancellazione.

C'è un modo per raggiungere questo obiettivo. Lo script è su un repository nudo (gestito da Gitolite), non è sulla workstation degli sviluppatori.

risposta

14

Quando git riceve una spinta, il gancio post-receive viene richiamato e passata dati stdin su ciascun arbitro che è stato consegnato, in file di <old-sha> <new-sha> <ref-name>, in questo modo:

e1f5c274e296f1c5148161f9d4e5eb43a6743e54 1eea3f51cf926c3710f8fa4a06f503041c4597f0 refs/heads/master 

Quando un ramo viene eliminato, il <new-sha> l'ingresso è tutti zero, in questo modo:

6b239c481453c7fc2513b02e8aa0cd9c1ffa25cb 0000000000000000000000000000000000000000 refs/heads/foo 

quindi, è possibile regolare il vostro gancio post-receive per rilevare questo (e prevenire questo ramo da innescare una distribuzione) utilizzando la logica del tipo:

Ricordare che una singola spinta può contenere anche più rami di aggiornamento! Probabilmente vorrai accumulare una serie di rami che dovrebbero essere distribuiti, che iniziano con il prefisso appropriato e hanno un valore diverso da zero NEWSHA.

+0

Questa era la parte mancante, molte grazie! –

Problemi correlati