Jak zrobić pliki aktualizacji „git push” na swoim hoście?

13

Mam kilka witryn, które są hostowane w tej samej usłudze hostingowej w ramach hostingu współdzielonego. Mój hosting obsługuje Git i mam do niego dostęp SSH, a także mam konfigurację Git na moim laptopie.

Chcę to zrobić, aby po wykonaniu „git push origin master” automatycznie zaktualizował pliki na moim serwerze internetowym, a także zapisał kopię zapasową plików poprzedniego zatwierdzenia, aby w razie potrzeby móc je łatwo przywrócić. czy to możliwe?

Ryan
źródło
Ciekawy - kto jest twoim dostawcą hostingu?
użytkownik
A dlaczego miałbyś chcieć „kopii zapasowej plików poprzedniego zatwierdzenia”? Możesz po prostu przesunąć poprzednie zatwierdzenie, jeśli chcesz wycofać (zakładając, że zawsze wiesz, co ostatnio wypchnąłeś - ale i tak powinieneś to wiedzieć).
śleske,

Odpowiedzi:

12

Podsumowano to w Użycie Gita do zarządzania witryną

Kluczem do tego procesu jest hak po stronie serwera „post- receive ” (więcej o hakach git w Dostosowywanie Git - Git Hooks i strona podręcznika githooks ). Ten hak działa po odebraniu przez serwer wszystkich danych.

Gdy serwer otrzyma dane, uruchomi się git checkout -f . Opcja -f wymusi wymeldowanie do głowy, nawet jeśli występują lokalne różnice.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Umieść to w hooks/katalogu jako post-receivei plik wykonywalny. Oczywiście ścieżka zmienia się w miejsce, w którym masz pliki swojego serwera (użycie GIT_WORK_TREEustawia zmienną środowiskową tak, że nie musisz żonglować plikami kropkowymi i ustawieniami git na serwerze).

W celu wycofania należy oznaczyć każde wydanie (można to zrobić również jako część haka po zatwierdzeniu). Oznaczając wydanie, można łatwo zidentyfikować miejsce do wycofania, chociaż prawdopodobnie wiąże się to z zalogowaniem się na serwerze i sprawdzeniem tego znacznika.


źródło
Należy zauważyć, że oznacza to, że używasz git jako narzędzia do wdrażania, co nie jest tak naprawdę przeznaczone. Może działać, ale istnieje wiele ograniczeń (potrzeba pobrania całego repozytorium, nie ma sposobu na wywoływanie skryptów lub zarządzanie uprawnieniami do plików, nie ma sposobu na rozpakowanie rzeczy ...). Prawdopodobnie lepiej jest użyć odpowiedniego narzędzia do wdrażania.
śleske
@sleske Możesz zrobić to wszystko w post-receivehaczyku, który jest tak naprawdę tylko skryptem, w którym możesz umieścić, co chcesz.
Mario
@Mario: Tak, możesz - co oznacza, że ​​skutecznie wdrażasz własne rozwiązanie do wdrażania jako hak po otrzymaniu. Nadal istnieją zalety korzystania z istniejącego rozwiązania, ale czasami najlepsze może być skorzystanie z własnego ...
sleske
Możesz nawet pobrać do folderu pośredniego i mieć linki z folderu internetowego do folderu pośredniego, aby uniknąć plików .git w folderze internetowym.
Wygięty
0

Najprostszym sposobem na aktualizację drzewa roboczego repozytorium, do którego naciskasz, jest ustawienie git config receive.denyCurrentBranch updateInstead po stronie odbiornika. Zobacz https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

Odpowiedź Ryana z hakami po zatwierdzeniu jest lepsza, ponieważ pozwala na wyewidencjonowanie w innej lokalizacji (prawdopodobnie nie chcesz mieć .git w folderze internetowym). Ale na tym poziomie dobrym pomysłem może być użycie istniejącego narzędzia do wdrażania, takiego jak sleske w komentarzach.

Echsecutor
źródło