我发现了两种常见的方法来使用一个裸的远程仓库自动部署网站更新。
第一种方法要求将仓库克隆到Web服务器的文档根目录中,然后在post-update钩子中使用git pull。
cd /srv/www/siteA/ || exit
unset GIT_DIR
git pull hub master
第二种方法是向裸仓库添加一个“分离的工作树”。post-receive钩子使用git checkout -f将仓库的HEAD复制到工作目录中,该目录是Web服务器文档根目录,即:GIT_WORK_TREE=/srv/www/siteA/ git checkout -f
第一种方法的优点在于,可以将网站工作目录中进行的更改提交并推送回裸仓库(但不应在实际服务器上更新文件)。第二种方法的优点在于git目录不在文档根目录内,但这很容易通过使用htaccess解决。在最佳实践方面,是否有一种方法比另一种方法更为客观?我还缺少哪些优点和缺点?