2012-04-02 13 views
57

Czy jest jakiś sposób, aby skonfigurować git tak, że słucha aktualizacji z zdalnego repozytu i będzie ciągnąć, gdy coś się zmieni? Przypadek użycia: chcę wdrożyć aplikację internetową za pomocą git (otrzymuję kontrolę wersji wdrożonej aplikacji), ale chcę umieścić "centralne" repozytorium git na Githubie, a nie na serwerze sieciowym (interfejs Github jest po prostu bardzo miły) .Git: automatyczne pobieranie z repozytorium?

Czy ktoś to sprawdził? Jak robi to Heroku? Moje Google-fu nie daje mi żadnych trafnych wyników.

Odpowiedz

33

Git ma "haki", akcje, które można wykonać po innych akcjach. To, czego szukasz, to "hak po otrzymaniu". W administratorze github możesz ustawić adres URL, który zostanie trafiony (z ładunkiem zawierającym dane o tym, co właśnie zostało pchnięte) za każdym razem, gdy ktoś popchnie twoje repozytorium.

Co jest warte, nie sądzę, że auto-pull jest dobrym pomysłem - co by było, gdyby coś złego zostało zepchnięte do twojego oddziału? Chciałbym użyć narzędzia takiego jak capistrano (lub odpowiednik) dla takich rzeczy.

+4

Moim planowanym przypadkiem użycia było posiadanie oddzielnego repo/gałęzi dla dev "testowania i rozgrywania" etapu, i mieć specjalne repozytorium "push to production", które ja naciskaj tylko raz, jestem pewien, że wszystko działa. Zasadniczo używam Gita do robienia z rsync, oprócz tego, że przechowuje dziennik wszystkich wersji, które zostaną wdrożone, i łatwo mógłbym wrócić do poprzedniej wersji. Przewagą nad czymś bardziej hardcorowym, jak capistrano, nie musiałbym się uczyć zupełnie nowego narzędzia do tego, co jest (jak na razie) naprawdę małym projektem. –

11

W stylu unix można utworzyć zadanie cron, które nazywa się "git pull" (codziennie lub co tydzień lub cokolwiek innego) na komputerze. W oknach można użyć programu do planowania zadań lub polecenia "AT", aby zrobić to samo.

+2

Nie właściwa sposób korzystania z Git. – deepdive

+13

@deepdive Dlaczego nie? Wyobraź sobie, że masz mały Rasperry Pi w swoim domu i nie masz dostępnego statycznego adresu IP. Jaką inną opcję masz, prowadząc crona lub uruchamiając pracę? – kaiser

+2

To nie jest dobry pomysł. Chce, aby zmiany zostały zastosowane natychmiast po naciśnięciu. –

2

Istnieją programy do ciągłej integracji, takie jak Jenkins lub Bamboo, które mogą wykrywać zatwierdzenia i uruchamiać operacje, takie jak kompilacja, testowanie, pakowanie i wdrażanie. Robią to, co chcesz, ale są obciążone zależnościami, trudnymi do skonfigurowania iw końcu mogą używać okresowego sprawdzania w repozytorium git, które wywoływałoby taki sam efekt, jak wywoływanie gita przez crona co minutę.

2

można napisać skrypt, aby to osiągnąć, wykonując następujące rzeczy:

  1. uzyskać zdalny HEAD popełnić Numer ID
  2. porównać identyfikator z lokalnym HEAD
  3. jeśli są różne, użyj git pull i użyj polecenia wdrożyć
  4. czy takie same, przechodzą
  5. napisać crona do wykonania skryptu. (Uwaga: zapobiec duplikat wykonanie)
Powiązane problemy