Idealnie, haki są pisane bash, jeśli podążasz za przykładowymi plikami. Ale możesz napisać go w dowolnym dostępnym języku i upewnić się, że ma flagę wykonywalną.
Możesz więc napisać kod Python lub Go, aby osiągnąć swoje cele, i umieścić go w folderze hooks. Będzie działał, ale nie będzie zarządzany wraz z repozytorium.
Dwie opcje
a) Wiele skryptów
Możesz zakodować haki w pomocy i dodać do nich mały fragment kodu, aby wywołać swój idealny skrypt, jak poniżej:
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/myprecommit.js
b) Pojedynczy skrypt
Fajniejszą opcją jest dodanie tylko jednego skryptu, aby rządzić nimi wszystkimi, zamiast kilku. Więc tworzysz hooks / mysuperhook.go i celujesz każdym hakiem, który chcesz mieć.
$ cat .git/hooks/pre-commit
#!/bin/bash
../../hooks/mysuperhook.go $(basename $0)
Ten parametr dostarczy Twojemu skryptowi, który hook został wyzwolony, i możesz rozróżnić go w kodzie. Dlaczego? Czasami możesz na przykład uruchomić tę samą kontrolę zatwierdzania i wypychania.
I wtedy?
Następnie możesz chcieć mieć dodatkowe funkcje, takie jak:
- Ręcznie uruchom zaczep, aby sprawdzić, czy wszystko jest w porządku, nawet przed zatwierdzeniem lub wypchnięciem. Jeśli po prostu wywołasz skrypt (opcja a lub b), załatwi sprawę.
- Uruchom zaczepy na CI, więc nie musisz przepisywać tych samych sprawdzeń dla CI, byłoby to na przykład po prostu wywołanie wyzwalacza zatwierdzenia i wypchnięcia. To samo co powyżej powinno to rozwiązać.
- Wywołaj narzędzia zewnętrzne, takie jak walidator przeceny lub walidator YAML. Możesz wykonywać połączenia systemowe i obsługiwać STDOUT i STDERR.
- Upewnij się, że wszyscy programiści mają prosty sposób na zainstalowanie hooków, więc do repozytorium należy dodać ładny skrypt, aby zastąpić domyślne hooki poprawnymi
- Mieć globalnych pomocników, takich jak czek, aby zablokować zatwierdzenia do opracowania i opanowania gałęzi, bez konieczności dodawania go do każdego repozytorium. Możesz go rozwiązać, mając inne repozytorium ze skryptami globalnymi.
Czy to może być prostsze?
Tak, istnieje kilka narzędzi, które pomogą ci zarządzać haczykami. Każdy z nich jest dostosowany do rozwiązania problemu z innej perspektywy i być może będziesz musiał zrozumieć je wszystkie, aby uzyskać ten, który jest najlepszy dla Ciebie lub Twojego zespołu. GitHooks.com oferuje wiele informacji na temat zaczepiania oraz kilka dostępnych dziś narzędzi.
Na dzień dzisiejszy wymieniono tam 21 projektów z różnymi strategiami zarządzania hakami git. Niektóre robią to tylko dla jednego haka, inne dla określonego języka i tak dalej.
Jedno z tych narzędzi, napisane przeze mnie i oferowane za darmo jako projekt typu open source, nazywa się hooks4git . Jest napisany w Pythonie (bo mi się podoba), ale pomysł polega na obsłudze wszystkich elementów wymienionych powyżej w jednym pliku konfiguracyjnym o nazwie .hooks4git.ini, który znajduje się w twoim repozytorium i może wywoływać dowolny skrypt, który chcesz wywołać, w dowolnym języku .
Korzystanie z haków git jest absolutnie fantastyczne, ale sposób, w jaki są oferowane, zwykle tylko odciąga ludzi od tego.