2011-02-02 12 views
9

Jestem nowy dla git i chcę móc przechwycić komunikat zatwierdzenia po naciśnięciu do origin/master i uruchomić skrypt bash (na serwerze) na czym zawiera ciąg.Jak przechwycić wiadomość zatwierdzenia git i uruchomić akcję

Na przykład, jeśli mój git commit wiadomość mówi: [email] my commit message

Jeśli wiadomość zawiera [email] popełnić następnie wykonać określone działanie, w przeciwnym razie, nie rób tego.

Oto przykładowy skrypt bash Mam na myśli używając w haku post-receive:

#!/bin/bash 

MESSAGE= #commit message variable? 

if [[ "$MESSAGE" == *[email]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

W zasadzie wszystko, co musisz wiedzieć, co zmienna nazwa komunikatu zatwierdzenia jest, aby korzystać w powyższym bash scenariusz? Ponadto, nie jestem pewien, czy jest to odpowiedni hak do tego, czy nie.

Odpowiedz

24

myślę zorientowali się odpowiedzi na moje własne pytanie; zmienna może być pobrany za pomocą komendy git-log:

git log -1 HEAD --pretty=format:%s 

tak, mój skrypt będzie:

#!/bin/bash 

MESSAGE=$(git log -1 HEAD --pretty=format:%s) 

if [[ "$MESSAGE" == *\[email\]* ]]; then 
     echo "do action here" 
else 
     echo "do nothing" 
fi 

Mam nadzieję, że to może pomóc każdemu, kto szuka odpowiedzi.

+0

Więc ten znacznik "[email]" będzie trwale częścią wiadomości o zatwierdzeniu? – Cascabel

+0

Inne możliwe metody: użyj zmiennej środowiskowej, aby zasygnalizować hakowi, więc nie ma nic w wiadomości o zatwierdzeniu. Użyj aliasu, aby to ułatwić. Lub, jeśli chcesz zapisać go w wiadomości, wykryj znaczniki w haczyku przed zatwierdzeniem, aby móc zmodyfikować wiadomość przed zarejestrowaniem zatwierdzenia. (Przyjmij, że zatwierdzenie się powiedzie i od razu wyślesz e-mailem, lub zapiszesz coś dla haka po zatwierdzeniu, aby wprowadzić klucz ...) – Cascabel

+0

Czy naprawdę robisz to po otrzymaniu, a nie po zatwierdzeniu? Wtedy oczywiście nie można już modyfikować komunikatu zatwierdzenia. Oznacza to jednak, że twoje rozwiązanie nie działa: naciśnięcie nie przesuwa tylko jednego zatwierdzenia, aktualizuje dowolną liczbę odwołań, z których każda może zawierać dowolną liczbę nowych zatwierdzeń. Powinieneś naprawdę spojrzeć na [przykład] (http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/hooks/post-receive-email;hb=HEAD) w git's contrib. Zajmuje sporo czasu i możesz go zmodyfikować, aby zwracał uwagę tylko na zatwierdzenia, które mówią "[email]". – Cascabel

1

Prawdopodobnie chcą git hook dla tego

+0

Używam już haka po otrzymaniu; jakiej zmiennej używam w skrypcie basha, czy jeszcze lepiej, czy możesz wskazać mi odniesienie lub przykład, który może mi powiedzieć, czego użyć, aby można go było parsować? –

+2

Dla Twojej wygody opublikuję tekst z linku, który Pablo wysłał ci tutaj: "Po zakończeniu całego procesu zatwierdzania, uruchamiany jest hak po zatwierdzeniu. Nie pobiera żadnych parametrów, ale możesz łatwo uzyskać ostatnie commit, uruchamiając git-log -1 HEAD - zazwyczaj ten skrypt jest używany do powiadamiania lub czegoś podobnego. " – Dustin

+0

Aby odpowiedź była rzeczywiście przydatna, powinna zawierać co najmniej tyle z powyższego komentarza, aby w uzasadniony sposób ustąpić. – tripleee

Powiązane problemy