2011-09-07 86 views
32

Sto eseguendo un programma per avvisare CruiseControl ogni volta che viene inviato un aggiornamento al nostro repository remoto. Sto usando un hook post-update Git per questo.Trova il nome del ramo Git nel gancio post-aggiornamento

Sarebbe bello se potessi scoprire quale ramo è stato commesso, quindi potrei usarlo per informare CruiseControl su quale ramo costruire. C'è un modo per accedere al nome del ramo all'interno di un hook post-aggiornamento?

risposta

43

Il primo parametro per il hook post-aggiornamento è il riferimento di diramazione completo - ad esempio, vedo "refs/heads/master" per un push a "master di origine". Quindi uno script hook esempio che stampa il ramo modificato è:

#!/bin/sh 
branch=$(git rev-parse --symbolic --abbrev-ref $1) 
echo Update pushed to branch $branch 
exec git update-server-info 

Per illustrare, quando il tutto viene posto nelle tue ganci repository remoti file/post-aggiornamento seguente viene stampato quando si esegue una spinta:

% git push origin master 
Counting objects: 5, done 
Writing objects: 100% (3/3), 247 bytes, done. 
Total 3 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (3/3), done. 
remote: Update pushed to branch master 
To /tmp/xx/a 
    e02d9cd..ab14a08 master -> master 

La nuova riga che inizia con "remote:" è stata generata dal nostro script di hook.

+0

Grazie, Patthoyts. Usando il codice sopra, ricevo "remote: hook/post-update: line 8: branch: comando non trovato". anch – user489998

+0

Ho fornito un campione esteso. È necessario ancora la riga #!/Bin/sh all'inizio. Inoltre, quando si imposta una variabile in uno script di shell, utilizzare $ per accedere al valore – patthoyts

+0

Wayhey! Questo è fatto. Grazie mille pattuzze. – user489998