В git вы обычно никогда не отправляете в репозиторий с проверкой. Совсем. Вы можете нажать на одну, за исключением того, что вы не можете нажать на отмеченную ветку, но обычно вы не должны. Главным образом, чтобы держать вещи четко разделенными и не нарушать работу центрального хранилища, если веб-сервер ломается и требует ремонта.
Таким образом, у вас должен быть голый (термин, используемый для хранилища без рабочего дерева) центрального хранилища. Все будут использовать этот репозиторий. Он должен находиться в вашей внутренней сети и не должен находиться в docroot ни публичного, ни тестового сервера. На самом деле, я бы настоятельно рекомендовал не устанавливать его ни на один из серверов, а на отдельную (возможно, виртуальную) машину.
Теперь у вас есть веб-серверы. Они могут быть либо рабочими копиями, либо просто экспортированными, созданными с использованием git archive
, и могут быть обновлены с помощью cron или post-update
hook в центральном хранилище.
Рабочая копия обновляется git fetch central-repo-url master
на site.com
сервере и git pull central-repo-url develop
на test.site.com
сервере (хорошо, выборка + сброс, предложенные в другом ответе, вероятно, лучше, потому что вы уверены, что нет есть какие-то изменения).
Экспорт обновляется путем получения пакета zip или tar с git archive
и его распаковки. Это немного больше работы.
Крон просто периодически запускает команды. Это проще в настройке, но недостатком является задержка между отправкой и отображением контента на серверах.
Хук
post-update
более сложен в настройке, но не имеет этой задержки (очевидно, есть некоторая задержка, так как загрузка данных тоже занимает некоторое время). По сути, вы создаете скрипт для запуска обновления, который может быть запущен с помощью ssh или веб-запроса на серверах. Чем в центральном репозитории вы положили скрипт hooks/post-update
, который будет запускать скрипты на серверах. Не должно быть никакого способа дать им какие-либо параметры, и механизм не должен позволять запускать любой другой код, кроме этих сценариев, из соображений безопасности. Вы можете сделать ловушку более продвинутой, посмотрев, какая ветвь была нажата (см. Git doc, где вы ее нашли) и запустив только правильный сервер.
Чем git push origin develop
приведет к обновлению test.site.com
(но косвенно, через скрипты) и выполнению кода, который вы будете делать (на компьютере разработчика; никогда не работает на сервере!)
мастер проверки git
мерзавец слияния развиваться
git push origin master
и последняя команда приведет к обновлению site.com
, опять же косвенно через сценарии.