2009-05-19 30 views
10

sytuacja:strona Aktualizacja za pomocą jednego polecenia (git naciśnięciem) zamiast przeciągania FTP i upuszczanie

  • Mam lokalną kopię strony internetowej
  • Mam serwer, że mam SSH dostęp do

Co chcę zrobić?

  • Commit lokalnie aż jestem zadowolony z mojego kodu
  • Bądź oddziałów lokalnie
  • Mają jeden oddział główny, który jest jeden, które powinny być przekazywane do serwera
  • aktualizować stronę internetową za pomocą jednego polecenia (git push origin master)

Jeśli skonfiguruję repozytorium git lokalnie używając git init, a następnie przekażę do folderu na serwerze, to nie działa. Kiedy ja FTP do serwera, aby sprawdzić pliki, są one rzeczywiście. Kiedy wskakuję do serwera i mam status git, nie jest on czysty, mimo że powinien być, ponieważ właśnie wysłałem serwer.


Kroki robię:

  1. utworzyć nowy folder na moim komputerze (mkdir folder_x)
  2. Przejdź do tego folderu (CD folder_x)
  3. Konfigurowanie nowego repozytorium git tam (git init)
  4. (repozytorium git jest konfigurowane pomyślnie)
  5. Przekaż repozytorium do serwera za pomocą git push origin master (gdzie pochodzenie jest s i jako użytkownik: [email protected]) ​​
+0

duplikat http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

możliwy duplikat [Rozmieść projekt za pomocą Git push] (http://stackoverflow.com/questions/279169/ deploy-a-project-using-git-push). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) na pilocie to dobra możliwość. –

Odpowiedz

12

Musisz napisać hak po otrzymaniu, który uruchamia git checkout -f po tym, jak zdalne repozytorium git otrzyma push. Aby uzyskać szczegółowe informacje, patrz Using Git to manage a web site.

+1

wydaje się zakładać, że tak naprawdę nie pracuję na moim serwerze internetowym. Więc jakakolwiek praca tam wykonana jest stracona – gman

+0

Z Git 2.3 nie potrzebujesz już tego haka, możesz zrobić 'git config receive.denyCurrentBranch updateInstead'. Zobacz https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

Myślę, że komentarz @Aurelien powinien być zaakceptowaną odpowiedzią! Bardzo ładne rozwiązanie! –

1

Po naciśnięciu do repozytorium git nie aktualizuje plików roboczych repozytorium. Zasadniczo, kiedy naciskasz, powinieneś naciskać na puste repozytorium --- wydaje się, że zamierzali git push do pracy.

Dla jednego z moich (lokalnych) projektów, napisałem skrypt, aby automatycznie sprawdzić najnowszy podkatalog "ui", kiedy popycham moją pracę do repozytorium wdrażania. Jest on osadzony w poprzedniej odpowiedzi tutaj: Developing Django projects using Git

Możesz również po prostu uaktualnić hak na serwerze zrobić "git reset --hard master", jeśli ktoś popycha aktualizację do wzorca, i użyć nie-bare repo, a nie oddzielny obszar dla sprawdzonych plików.

0

Wersja Git 1.9.1
Serwer Ubuntu 14.04 LTS
LAMP Server

Ustawiłem serwer LAMP, aby aktualizował mój katalog roboczy mojego repozytorium Git, gdy jeden z moich programistów stron internetowych popchnie zmianę na serwerze. Zauważyłem, że dziennik zanotuje nowe zatwierdzenia, ale nie zaktualizuje katalogu roboczego. Zamiast robić to ręcznie (git checkout -f) dla każdej aktualizacji, można to ustawić automatycznie, aby to zrobić po otrzymaniu naciśnięcia.

  1. W katalogu ".git" przejdź do "haków" folder.
  2. Utwórz plik o nazwie "po otrzymywać" ciągu "haków" Folder z tej treści:

    #!/Bin/sh

    # Aktualizacja katalogu roboczego po otrzymaniu push od zdalni klienci.
    # To powinno być skierowane do katalogu roboczego git.

    GIT_WORK_TREE =/var/www/dev_site git checkout -f

  3. Włącz uprawnienia do wykonywania pliku wpisując "chmod + x po otrzymywać" w folderze "haczyków".

Teraz zaktualizuje katalog roboczy, gdy zatwierdzenia zostaną przekazane do repozytorium Git. Moja witryna pokazuje teraz zmiany, gdy odwiedzam ją w przeglądarce.

W tym przykładzie mój katalog roboczy to "/var/www/dev_site". Zmień to zgodnie z miejscem, w którym znajduje się Twoje Repo.

Pamiętaj, że to nie jest Repo. Nagie Repo nie ma katalogu roboczego, z którego można odczytać serwer WWW.