Oto mój obecny punkt zaczepienia w gołym repozytorium, który znajduje się na serwerze firmy:
git push origin master
To przechwytywanie wypycha do Assembla. Potrzebuję tylko jednej gałęzi (najlepiej głównej), gdy ktoś wypycha zmiany do tej gałęzi na naszym serwerze i ignoruje wypychanie do innych gałęzi. Czy można wybrać gałąź z samego repozytorium i przekazać tylko tę gałąź do Assembla?
git
repository
hook
git-bare
Jorge Guberte
źródło
źródło
git push origin master
przesyła tylkomaster
gałąź doorigin
pilota, który, jak zakładam, jest zdefiniowany jako Assembla. Czy mówisz, że musisz aktywować hak tylko wtedy, gdy ktoś popychamaster
, a niefeature1
, czy coś w tym stylu?Odpowiedzi:
Punkt zaczepienia po odbiorze pobiera argumenty ze standardowego wejścia w postaci
<oldrev> <newrev> <refname>
. Ponieważ te argumenty pochodzą ze stdin, a nie z argumentu wiersza poleceń, należy użyćread
zamiast$1 $2 $3
.Hak po odbiorze może otrzymać wiele gałęzi jednocześnie (na przykład jeśli ktoś zrobi a
git push --all
), więc musimy również zawinąćread
wwhile
pętlę.Działający fragment wygląda mniej więcej tak:
źródło
#!/bin/sh
zamiast#!/bin/bash
?refs/heads/master
zamiastrefs/tags/master
ciebie, powinno być dobrze. Mogą istnieć inne takie skrajne przypadki, o których nie mogę myśleć. Może to być dobre pytanie dotyczące StackOverflow samo w sobie.if branch=$(git rev-parse --symbolic --abbrev-ref $refname 2>/dev/null); then
, aby git nie narzekał, gdy usuwam gałąź.Ostatnim parametrem, który podpięcie po odbiorze otrzymuje na stdin, jest zmiana ref, więc możemy go użyć do sprawdzenia, czy ta wartość to „refs / heads / master”. Trochę rubinu podobnego do tego, którego używam w hooku po odbiorze:
Zauważ, że dostaje linię dla każdego wypchniętego ref, więc jeśli pchnąłeś więcej niż tylko master, nadal będzie działać.
źródło
Odpowiedź Stefana nie działa dla mnie, ale to tak:
źródło
Żadne z powyższych rozwiązań nie zadziałało dla mnie. Po wielu, wielu debugowaniu okazuje się, że użycie polecenia „read” nie działa - zamiast tego parsowanie argumentów wiersza poleceń w zwykły sposób działa dobrze.
Oto dokładny haczyk po aktualizacji, który właśnie pomyślnie przetestowałem teraz na CentOS 6.3.
AKTUALIZACJA: jeszcze dziwniejsza uwaga, hak przed odbiorem pobiera dane wejściowe przez stdin, dlatego czytaj za pomocą „czytaj” (wow, nigdy nie sądziłem, że to powiem). Haczyk po aktualizacji nadal działa z 1 $ dla mnie.
źródło
post-receive
haczyków, a niepost-update
haczyków. Przyjmują swój wkład na różne sposoby.post-receive
przyjmuje stdin, jak wspomniano tutaj: git-scm.com/book/en/v2/Customizing-Git-Git-HooksOdpowiedź z @pauljz działa dobrze w przypadku niektórych haków git, takich jak
pre-push
, alepre-commit
nie ma dostępu do tych zmiennycholdrev newrev refname
Więc stworzyłem tę alternatywną wersję, która działa z pre-commitem lub naprawdę i hookiem. To jest
pre-commit
haczyk, który uruchomihusky
skrypt, jeśli NIE jesteśmy wmaster
gałęzi.Mam nadzieję, że to komuś pomoże. Możesz łatwo modyfikować do swoich potrzeb wszystko pomiędzy stwierdzeniami
if
ifi
.źródło
Napisałem dla siebie skrypt PHP, aby wykonać tę funkcję.
https://github.com/fotuzlab/githubdump-php
Umieść ten plik na swoim serwerze, najlepiej repozytorium root i zdefiniuj adres URL w webhookach github. Zmień 'allcommits' w linii 8 na nazwę swojej gałęzi i dodaj swój kod / funkcję w linii 18.
na przykład
źródło
Proste podejście, na
git hook
piśmieProste - więcej informacji na temat tego wspaniałego systemu podpinania linków
źródło