У меня есть несколько сайтов, которые все размещены на одном веб-хостинге под общим хостингом. Мой веб-хостинг поддерживает Git, и у меня есть SSH-доступ к нему, а также у меня есть настройка Git на моем ноутбуке.
Я хочу сделать так, чтобы при выполнении «git push origin master» он автоматически обновлял файлы на моем веб-сервере, а также сохранял резервную копию файлов предыдущего коммита, чтобы я мог легко откатиться, если захочу. Это возможно?
Ответы:
Это обобщено из Использование Git для управления веб-сайтом
Ключом к процессу является ловушка на стороне сервера «post-receive» (подробнее о перехватах git на странице « Настройка Git - Git Hooks» и справочной странице githooks ). Эта ловушка запускается после того, как сервер получил все данные.
Как только сервер получает данные, он запускает
git checkout -f
опцию -f, чтобы принудительно оформить заказ, даже если существуют локальные различия.Поместите это в
hooks/
каталог какpost-receive
и исполняемый файл. Конечно, путь меняется на то, где у вас есть файлы вашего веб-сервера (использованиеGIT_WORK_TREE
устанавливает переменную окружения, так что вам не нужно манипулировать точечными файлами и настройками git на сервере).Для отката нужно пометить каждый релиз (это можно сделать также как часть перехвата пост-фиксации). Пометив релиз, можно легко определить место, к которому необходимо выполнить откат, хотя это, вероятно, предполагает вход на сервер и проверку этого тега.
источник
post-receive
хуке, который на самом деле является просто сценарием, куда вы можете вставить все, что захотите.Самый простой способ обновить рабочее дерево репозитория, к которому вы обращаетесь, - это настроить
git config receive.denyCurrentBranch updateInstead
на стороне получателя. Смотрите https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranchОтвет Райана с перехватами после фиксации лучше в том, что он позволяет проверить в другом месте (вы, вероятно, не хотите иметь .git в своей веб-папке). Но на этом уровне было бы неплохо использовать какой-либо существующий инструмент развертывания, как сказал sleske в комментариях.
источник