Git: automatyczne pobieranie z repozytorium?

90

Czy istnieje sposób na skonfigurowanie gita tak, aby nasłuchiwał aktualizacji ze zdalnego repozytorium i ściągał, gdy coś się zmieni? Przykład użycia polega na tym, że chcę wdrożyć aplikację internetową za pomocą git (więc mam kontrolę wersji wdrożonej aplikacji), ale chcę umieścić „centralne” repozytorium git na Github, a nie na serwerze internetowym (interfejs Github jest po prostu bardzo fajny) .

Czy ktoś sprawił, że to zadziałało? Jak to robi Heroku? Moje Google-fu nie daje mi żadnych odpowiednich wyników.

Li Haoyi
źródło

Odpowiedzi:

48

Git ma „zaczepy”, akcje, które można wykonać po innych akcjach. Wydaje się, że szukasz „haka po odbiorze”. W panelu administracyjnym github możesz ustawić adres URL po odbiorze, który będzie trafiony (z ładunkiem zawierającym dane o tym, co właśnie zostało wysłane) za każdym razem, gdy ktoś przejdzie do twojego repozytorium.

Bo ile jest warte, nie sądzę, żeby automatyczne ściąganie było dobrym pomysłem - a co jeśli coś złego zostało wepchnięte do twojej gałęzi? capistranoDo takich rzeczy użyłbym takiego narzędzia (lub jego odpowiednika).

ksol
źródło
10
Mój planowany przypadek użycia polegał na utworzeniu oddzielnego repozytorium / gałęzi dla etapu "testowania i majstrowania" oraz specjalnego repozytorium "wypychania do produkcji", do którego wysyłam tylko wtedy, gdy jestem pewien, że wszystko działa. Zasadniczo używam Gita do zrobienia z rsync, co może zrobić, z wyjątkiem tego, że przechowuje dziennik wszystkich wdrożonych wersji i mógłbym łatwo przywrócić poprzednią wersję. Przewaga nad czymś bardziej hardkorowym jak Capistrano polega na tym, że nie musiałbym uczyć się zupełnie nowego narzędzia do tego, co (jak na razie) jest naprawdę małym projektem.
Li Haoyi
Uwierzytelnianie elementu webhook zwiększa bezpieczeństwo i zwiększa złożoność, więc rozwiązania oparte na ściąganiu nadal mają swoje zalety. Kontrolę wersji wydania można przeprowadzić za pomocą tagów, aby uniknąć przypadkowego wdrożenia.
lz96
21

Na unix-like możesz stworzyć zadanie crona, które wywołuje "git pull" (codziennie, co tydzień lub cokolwiek) na twojej maszynie. W systemie Windows możesz użyć harmonogramu zadań lub polecenia „AT”, aby zrobić to samo.

SigTerm
źródło
3
Nie jest to właściwy sposób korzystania z Gita.
nurkowanie głębokie
26
@deepdive Dlaczego nie? Wyobraź sobie, że masz w domu małe Rasperry Pi i nie masz dostępnego statycznego adresu IP. Jaką inną opcję masz wtedy, gdy uruchamiasz cron lub uruchamiasz podczas pracy?
kaiser
2
To nie jest dobry pomysł. Chce, aby zmiany zostały zastosowane natychmiast po naciśnięciu.
boi_echos
10
OP prosi w szczególności o metodę, która nasłuchuje aktualizacji ze zdalnego repozytorium i będzie pobierać, gdy coś się zmieni . To rozwiązanie po prostu pobierałoby z repozytorium co jakiś czas, więc aby było skuteczne, interwał musiałby być bardzo krótki, co prowadziłoby do bardzo wielu zbędnych żądań ściągnięcia.
Boaz
3
Szybkim sposobem na to zrobić bez zmiany kartę cron: while true; do git pull; sleep 10; done. Będzie to robić git pullco 10 sekund ...
JakeD,
3

Istnieją programy do ciągłej integracji, takie jak Jenkins lub Bamboo, które mogą wykrywać zatwierdzenia i wyzwalać operacje, takie jak kompilacja, testowanie, pakowanie i wdrażanie. Robią, co chcesz, ale są ciężkie z zależnościami, trudne do skonfigurowania i na koniec mogą używać okresowego sprawdzania repozytorium git, co miałoby taki sam efekt jak wywoływanie git pull przez cron co minutę.

Pavel Niedoba
źródło
0

Wiem, że to pytanie jest trochę stare, ale możesz użyć dziennika systemu Windows i gita, aby automatycznie wypełnić swój projekt za pomocą webhooka i php (zakładając, że twój projekt obejmuje serwer sieciowy. Zobacz moją treść tutaj: https://gist.github.com/ upggr / a6d92e2808e9628ebe0d01fd93569f4a

Ioannis Kokkinis
źródło