Jak mogę wypchnąć repozytorium Git do folderu przez SSH?

53

Mam folder o nazwie mój projekt, w którym zrobiłem git init , git commit -a itp.

Teraz chcę wypchnąć go do pustego folderu w / mnt / foo / bar na zdalnym serwerze.

Jak mogę to zrobić?

Próbowałem na podstawie tego, co przeczytałem:

cd my-project
git remote add origin ssh://user@host/mnt/foo/bar/my-project.git
git push origin master

co nie wydawało się właściwe (zakładam, że źródło pojawi się przed miejscem docelowym) i nie udało się:

fatal: '/mnt/boxee/git/midwinter-physiotherapy.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Chciałbym, aby działało tak, że nie muszę uzyskiwać dostępu do zdalnego hosta i ręcznie inicjować repozytorium Git za każdym razem ... czy muszę to robić? Czy w ogóle wybieram właściwą drogę?

Dzięki.

bogaty
źródło

Odpowiedzi:

56

Polecenie jest poprawne; jednak adres zdalny musi również wskazywać na zainicjowane repozytorium Git. Jest to jednak praca jednorazowa.

ssh user@host "git init --bare /mnt/foo/bar/my-project.git"

(W Git „puste” repozytorium to takie, w którym nie ma działającego drzewa).

grawitacja
źródło
11

Jeśli chcesz zarówno przekazać do repozytorium, jak i zaktualizować pliki na serwerze , możesz utworzyć haczyk git po stronie serwera , aby pobrać pliki po ich wypchnięciu. W katalogu git po stronie serwera/hooks/ utwórz plik o nazwie post-receivei dodaj następujący kod (aktualizując katalogi, aby pasowały do ​​struktury folderów):

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

Następnie nadaj plikowi odpowiednie uprawnienia za pomocą chmod +x post-receive

Więcej informacji i szczegółowe wyjaśnienie tutaj: https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps

Kyle Chadha
źródło
2

Jeśli nie chcesz ręcznie tworzyć repozytorium na serwerze, możesz zainstalować gitosis , co zautomatyzuje proces. Ale musisz utworzyć proces na serwerze, aby utworzyć repozytorium - nie możesz tego zrobić przez połączenie git ssh z klientem.

Mike Scott
źródło