Перенос файлов сайта с локального компьютера на VPS (сервер) с помощью Git
Речь пойдет о наиболее простом способе, как с помощью Git перенести файлы готового сайта (проекта) с локального компьютера на удаленный веб-сервер и обновлять онлайн-версию сайта при внесении изменений в него на своем локальном компьютере.
Данный способ не предполагает правку сайта на стороне VPS с последующим пулом изменений на локальный компьютер. Если все же захотите загрузить с сервера измененные версии файлов, можно воспользоваться утилитой scp, затем выполнить коммит в каталоге разработки проекта.
Если вы в основном будете править сайт на сервере, то там надо создавать не "голый", а обычный репозиторий. В этом случае схема работы с Git будет сложнее, чем описана ниже.
Предполагается, что сам git (как системная утилита) уже установлен на обоих компьютерах и выполнена его настройка (заданы имя и почта пользователя).
Первое, что надо сделать, это на удаленном веб-сервере создать так называем "голый" (bare) git-репозиторий. Каталог такого репо не содержит файлы вашего проекта. Но он сохраняет сведения о версиях каждый раз, когда вы выполняете пуш. Для голого репозитория команда git status
не работает, git log
работает.
Зайдите на свой VPS:
$ ssh tech@site.com
(Вместо site.com, то есть домена, привязанного к IP, может находиться сам IP-адрес. Также пользователь может быть другим.)
Допустим, программный веб-сервер (в нашем случае Apache) настроен так, чтобы направлять запросы к сайту https://site.com в каталог /var/www/site.com/ (предполагается, что каталог уже был создан ранее).
Создадим другой каталог. В нем будут храниться файлы Git, обслуживающие сайт, и перейдем в него:
tech@server:~$ mkdir site.com.git tech@server:~$ cd site.com.git/
(место размещения произвольное)
Создаем репозиторий:
tech@server:~/site.com.git$ git init --bare
Пустой, или голый (bare), репозиторий означает, что его каталог не хранит файлы проекта. Такие репозитории используются как централизованные хранилища и не предполагают, что на этом сервере проект будет правиться и будут выполняться коммиты.
Переходим в его подкаталог hooks:
tech@server:~/site.com.git$ cd hooks
Здесь создаем хук post-receive. Открываем файл в редакторе, например, vim:
tech@server:~/site.com.git/hooks$ vim post-receive
В файле укажем (i), что данный репозиторий связан с каталогом нашего сайта:
#!/bin/sh git --work-tree=/var/www/site.com --git-dir=/home/tech/site.com.git checkout -f
Сохраняем и выходим (Esc → :wq → Enter - это команды для Vim).
Файл надо сделать исполняемым:
tech@server:~/site.com.git/hooks$ chmod +x post-receive
На этом подготовка удаленного веб-сервера (VPS) к переносу файлов сайта завершена.
На локальном компьютере перейдем в каталог проекта. Если git-репозитория здесь еще нет, его надо создать (не "голый", а обычный):
$ git init
Свяжем его с удаленным:
$ git remote add live ssh://tech@site.com/home/tech/site.com.git
Назвать удаленный репо можно произвольно, не обязательно live.
Если коммитов нет, создаем:
$ git add . $ git commit -m "Первый коммит"
Пушим его на удаленный сервер:
$ git push live master
Если будет только один удаленный репозиторий, то можно выполнить команду
$ git push -u live master
Тогда все последующие коммиты отправляются командой
$ git push
В большинстве случаев на сервере потребуется перезапуск программного веб-сервера (по-крайней мере так обстоит дело с Apache), чтобы внесенные изменения появились на сайте.
Обратите внимание, что сайт может не работать или пуш может не выполниться, так как на удаленном сервере права на каталог сайта и его содержимое могут оказаться не у того пользователя. Также следует обратить внимание на разрешения на файлы и каталоги.
После внесения измений в проект на локальном компьютере, чтобы обновить рабочую директорию на сервере, необходимо выполнять очередные коммиты и делать пуши.