Chcielibyśmy stworzyć kilka podstawowych skryptów przechwytujących, które wszyscy możemy udostępnić - na przykład w celu wstępnego formatowania komunikatów zatwierdzania. Git ma do tego skrypty przechwytujące, które normalnie są przechowywane pod <project>/.git/hooks/
. Jednak skrypty te nie są propagowane, gdy ludzie wykonują klon i nie są kontrolowani pod kątem wersji.
Czy istnieje dobry sposób, aby pomóc wszystkim uzyskać odpowiednie skrypty przechwytujące? Czy mogę po prostu sprawić, aby te skrypty przechwytujące wskazywały skrypty sterowane wersją w moim repozytorium?
pre-commit
sprawia, że jest to łatwe dla haków poprzedzających zatwierdzenie. Nie odpowiada na pytanie OP dotyczące zarządzania dowolnym arbitralnym hakiem git, ale haki pre-commit są prawdopodobnie najczęściej używane do celów jakości kodu.Odpowiedzi:
Teoretycznie możesz utworzyć
hooks
katalog (lub dowolną inną nazwę) w katalogu projektu ze wszystkimi skryptami, a następnie utworzyć dowiązanie symboliczne.git/hooks
. Oczywiście każda osoba, która sklonowała repozytorium, musiałaby skonfigurować te dowiązania symboliczne (chociaż można się naprawdę spodobać i mieć skrypt wdrażania, który kloner mógłby uruchomić, aby skonfigurować je półautomatycznie).Aby wykonać dowiązanie symboliczne na * nix, wystarczy:
użyj,
ln -sf
jeśli jesteś gotowy, aby zastąpić zawartość.git/hooks
źródło
core.hooksPath
do skonfigurowania pliku poza .git w celu połączenia z folderem hooks.W Git 2.9 opcja konfiguracji
core.hooksPath
określa niestandardowy katalog hooków.Przenieś swoje haki do
hooks
śledzonego katalogu w swoim repozytorium. Następnie skonfiguruj każde wystąpienie repozytorium, aby korzystało ze śledzonegohooks
zamiast$GIT_DIR/hooks
:Zasadniczo ścieżka może być bezwzględna lub względna do katalogu, w którym uruchamiane są haki (zwykle działający katalog główny drzewa; patrz sekcja OPIS
man githooks
).źródło
Jeśli twój projekt jest projektem JavaScript i używasz go
npm
jako menedżera pakietów, możesz użyć współużytkowanych haczyków do wymuszania githookównpm install
.źródło
.git/hooks
.Dla Nodejs użytkowników prostym rozwiązaniem jest aktualizacja package.json z
Preinstalacja potrwa zanim
i przekierowuje gita w poszukiwaniu haków w katalogu . \ hooks (lub jakkolwiek wybierzesz nazwę). Ten katalog powinien naśladować . \. Git \ hooks pod względem nazwy pliku (minus .sample) i struktury.
Wyobraź sobie, że Maven i inne narzędzia do budowania będą miały odpowiednik do preinstalacji .
Powinien także działać na wszystkich platformach.
Jeśli potrzebujesz więcej informacji, zobacz https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
źródło
Co powiesz na git-hooks , przekierowuje
.git/hooks
invoke do skryptu w katalogu projektugithooks
.Istnieje również wiele funkcji, które pozwalają zminimalizować kopiowanie i zawieszanie dowiązań symbolicznych w dowolnym miejscu.
źródło
Większość współczesnych języków programowania, a raczej ich narzędzi do budowania, obsługuje wtyczki do zarządzania hakami git. Oznacza to, że wszystko, co musisz zrobić, to skonfigurować pakiet.json, pom.xml itp., A każdy w zespole nie będzie miał innej opcji, jak tylko się dostosować, chyba że zmieni plik kompilacji. Wtyczka doda zawartość do katalogu .git.
Przykłady:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
źródło
Korzystamy z rozwiązań Visual Studio (a tym samym projektów), które mają zdarzenia przed i po kompilacji. Dodaję dodatkowy projekt o nazwie „GitHookDeployer”. Projekt samodzielnie modyfikuje plik w zdarzeniu po kompilacji. Ten plik jest ustawiony do skopiowania do katalogu kompilacji. Dlatego projekt jest budowany za każdym razem i nigdy nie jest pomijany. W przypadku kompilacji upewnia się również, że wszystkie haki git są na swoim miejscu.
Pamiętaj, że nie jest to ogólne rozwiązanie, ponieważ niektóre projekty oczywiście nie mają nic do zbudowania.
źródło
Możesz użyć rozwiązania zarządzanego do zarządzania przechwytem przed zatwierdzeniem, takiego jak zatwierdzenie wstępne . Lub scentralizowane rozwiązanie dla haczyków typu git po stronie serwera, takich jak Datree.io . Ma wbudowane zasady, takie jak:
Nie zastąpi wszystkich twoich haków, ale może pomóc twoim programistom w najbardziej oczywistych, bez konfiguracji konfiguracji instalowania haków na każdym komputerze / repozytorium każdego programisty.
Oświadczenie: Jestem jednym z założycieli Datrees
źródło
Możesz uczynić folder hooków innym repozytorium git i połączyć go jako submoduł ... Myślę, że warto, tylko jeśli masz dużo członków i hooki zmieniane regularnie.
źródło
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:
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ć.
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:
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.
źródło
Dla stopniowych użytkowników
Uważam, że te skrypty są bardzo przydatne w projektach stopniowych.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
wstępnie zatwierdzić
źródło