Planuję napisać kilka haków git jako projekt, który rejestruje działania użytkownika w bazie danych. Ta baza danych może następnie służyć do sprawdzania wszystkich swoich działań. Działania Próbuję zalogować sięGit global hook customization
- popełnić
- ciągnąć
- Push
- seryjnej
- oddział
Chcę, aby to zapakowane w dystrybucji, które mogą być instalowane przez menedżer pakietów. Git zezwala na globalne przechwycenie przez umieszczenie dowolnego takiego w $PREFIX/share/templates/hooks
Obecnie ma kilka haków, które są wyłączone (.sample
jest dołączany do ich nazwy). Kiedy nowy repozytorium jest tworzone, te haki są kopiowane w folderze .git
repozytorium
Teraz, gdy użytkownik instaluje pakiet dla tych haków i haczyków jak post-commit
i post-update
są już włączone. W takim przypadku plik skryptu zostanie nadpisany! Brzmi to niepoprawnie
Oznacza to, że git ma tylko jeden plik haka na działanie. Jeśli potrzebuję trzech haczyków na jedno działanie, oznacza to, że nie jest to możliwe. Oznacza to, że zautomatyzowana instalacja z menedżera pakietów może powodować konflikty.
Teraz myślę, że zapakowaliśmy haki, aby nadpisać domyślny włączony plik. Jeśli użytkownik chce dodać więcej akcji do tego pliku, a następnie zdecydował się na odinstalowanie mojego pakietu, to jego niestandardowe polecenie również zniknęłoby?
Myślałem, że git było całkiem mądry w tym względzie i myliłem :(
Tam musi być folder o nazwie post-commit
i post-update
lub cokolwiek działań i git należy uruchomić wszystkie skrypty wewnątrz tego folderu. Jestem wciąż poszukując sposobu radzenia sobie z bieżącą sytuacją
Możesz rzucić okiem na to [pytanie o śledzenie haków git] (http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository) - zamieściłem wersję barebone instalacji dowiązań symbolicznych w Katalog haków, które uruchamiają odpowiednie haki - można go łatwo rozszerzyć do wielu haczyków dla tego samego zadania, a także zapewnia użytkownikom pozostawiając własne lokalne haczyki. – Cascabel
Uwaga: Prosta "uruchom listę skryptów" nie będzie działać poprawnie dla wszystkich typów haków, ponieważ niektórzy z nich oczekują otrzymania danych na stdin (np. Pre-receive, post-receive, post-rewrite); w większości naiwnych implementacji pierwszy skrypt uruchomiłby wszystkie dane, a reszta dostałaby nic (EOF). Może to jednorazowe przechwycenie danych i podanie ich do każdego skryptu, ale może nie być odpowiednie dla wszystkich skryptów/sytuacji. –
Jefromi, dzięki. To dobrze, że dowiązanie może być rozwiązaniem, ale znowu problem polega na tym, jak łatać git na każdym komputerze, aby git init kopiował dowiązania symboliczne do folderu? Jakieś dobre przykłady? –