Я нашел два общих подхода к автоматическому развертыванию обновлений веб-сайта с помощью открытого удаленного репо.
Первый требует, чтобы репо было клонировано в корень документа веб-сервера, а в крюке после обновления используется git pull.
cd /srv/www/siteA/ || exit
unset GIT_DIR
git pull hub master
Второй подход добавляет "отдельное дерево обработки" в голый репозиторий. Крюк post-receive использует git checkout -f для репликации хранилища HEAD в рабочий каталог, который является корнем документа webservers, т. Е.
GIT_WORK_TREE=/srv/www/siteA/ git checkout -f
Первый подход имеет то преимущество, что изменения, внесенные в рабочий каталог веб-сайтов, могут быть зафиксированы и возвращены к общему репо (однако файлы не должны обновляться на реальном сервере). Второй подход имеет то преимущество, что каталог git не находится внутри корня документа, но это легко решить с помощью htaccess.
Является ли один метод объективно лучше другого с точки зрения лучшей практики? Какие еще преимущества и недостатки мне не хватает?