2013-09-04 14 views
7

Zastanawiałem się, jaki jest najlepszy sposób, aby utworzyć hak pre-push (w repo git), który wykonuje następujące czynności:Tworzenie pre-push hak niestrzępiącą/test

  • Run JSHint/JSLint
  • Jednostka Run i testy funkcjonalne
  • Jeśli wszystko jest w porządku, a następnie zaakceptować aktualizację
  • w przeciwnym wypadku odmówić aktualizację
+2

Github (usługa hostingu git) nie pozwala na dodanie dowolnych haków do hostowanych kopii repo. Ustawianie haków na * lokalnej * wersji twoich repozytoriów jest z pewnością możliwe, ale wtedy pytanie nie jest specyficzne dla Github :) – Gareth

+2

Tak więc, jedynym sposobem dodania haka jest użycie predefiniowanych przez [GitHub] (http : //developer.github.com/v3/repos/hooks/#create-a-hook)? –

+0

Po pierwsze, należy pamiętać, że naciśnięcie przycisku pre-push jest wykonywane na urządzeniu i to nigdy nie będzie Github. Zdarzenie "push", które Github oferuje jako Web Hook, jest w rzeczywistości uruchamiane jako post-receive, jak mówi na górze strony, z którą się łączyłeś. Tak więc może on być użyty tylko dla powiadomień – Gareth

Odpowiedz

2

można użyć Git pre commit do Zrób to. Skonfigurowałem haki poprzedzające zatwierdzenie, aby sprawdzić instrukcje debugowania, itp.

Haki po stronie klienta, takie jak ten, znajdują się w folderze .git/hooks. Ale ponieważ nie możesz zatwierdzić czegokolwiek w repozytorium .git do kontroli wersji, utknąłeś.

Co musisz zrobić, to zachować polecenie powłoki, które sprawdza poprawność w jakimś folderze w repozytorium git, na przykład katalog najwyższego poziomu tools.

Potem „tylko” powiedzieć ludziom, aby go zainstalować poprzez:

chmod u+x tools/precommit-checks.sh 

ln -s $PWD/tools/precommit-checks.sh .git/hooks/pre-commit 

i przy założeniu, że każdy instaluje go, można mieć sprawdzenie jak pytasz.

Prawdopodobnie lepszym sposobem jest złapanie tej strony serwera: mieć serwer ciągłej integracji, który pobiera najnowsze aktualizacje z repozytorium Github i sprawdza kod.

Nie, nie zapewni Ci możliwości "odmówić wypchnięcia".

Zakładając, że masz zamiar obsługiwać swoje repozytorium git, masz również inną zmarszczkę: Myślałem, że pre-receive hooks na serwerze zawiesi klientów tak długo, jak będzie to możliwe. (Ten jest udokumentowany jako prawdziwy dla haków po otrzymaniu, więc domyślam się, że to także jest tutaj). Jeśli więc testy CI trwają 2 minuty, pewien programista pisze git push i czeka 2 minuty, aż konsola zrobi coś jeszcze.

Najprawdopodobniej lepiej jest przeprowadzić analizę post-push przy użyciu serwera CI lub innych testów jakości.

+1

dlaczego to jest pre-commit zamiast haka przed push? Jako pre-push hook, dałoby opcję odmowy push - http://git-scm.com/docs/githooks#_pre-push –

+0

Jeśli pre-push dzieje się na komputerze klienta, to może być dobry pomysł. Jeśli dzieje się to na serwerze, jak na przykład przed odebraniem, zobacz mój problem z tym zawieszeniem. Ale pre-push może być interesujący: Wiem, że robię garść pracy, a następnie zrobić kilka commits wydobywania różnych elementów. Pre-push może uniknąć "Tak, wiem, że testy jednostkowe zawodzą w przypadku tego zatwierdzenia, daj mi sekundę". O ile nie masz takiej funkcji (aka: twoja drużyna używa git-bisect dużo, więc testy jednostkowe muszą przejść) – RyanWilcox

+0

jeśli dodasz to do swojego lokalnego.git/hooks dir, wszystkie haki są lokalne. Pre-push rozpocznie się tuż przed przejściem przez push, a jeśli którykolwiek skrypt uruchomi coś innego niż 0, push zostanie anulowany. –

Powiązane problemy