GIT deployment
… или “нестандартное использование системы управления версиями”.
Возможности GIT выходят за пределы управления версиями. Я использую его в качестве инструмента для развертывания проекта на сервере. Требуется: идентичные настройки среды проекта на рабочей станции (или испытательном стенде) и “боевом” сервере, GIT на клиенте, SSH на сервере и два простеньких скрипта.
Прежде всего создайте GIT-репозиторий в своей рабочей директории и поместите в него исходный код.
git init
git add .
git commit -m "Let there be light!"
Потом создайте GIT-репозиторий на боевом сервере.
ssh user@example.com
cd path/to/site
git init
Затем отредактируйте (там же, в директории проекта на “боевом” сервере) файл .git/hooks/post-receive так, чтобы он был примерно таким:
#!/bin/sh
cd ..
env -i /path-to-git/git reset --hard
… и сделайте его исполнимым.
chmod a+x .git/hooks/post-receive
Путь к git можно узнать, выполнив команду:
whereis git
После этого отключитесь от сервера и в локальной консоли выполните команду:
git push --force ssh://user@example.com/path/to/project/.git master:master
…и ваш локальный проект будет развернут на боевом сервере. А чтобы автоматизировать операцию, создайте исполняемый файл git-deploy.sh c таким содержанием:
#!/bin/bash
git add .
git commit -a --amend --reuse-message=HEAD
git push --force ssh://user@example.com/path/to/project/.git master:master
Каждый раз, когда вы будете выполнять этот файл, все внесенные изменения добавятся к последнему комиту и выгрузятся на сервер. То есть в истории вашего проекта не будет лишних комитов, связанных с выгрузкой на сервер, а будет только история разработки. Все эксперименты можно проводить в параллельных ветках, выгружаться на сервер они будут только после того, как вы “сольете” изменения в ветку master.