我发现了两种使用裸远程仓库自动部署网站更新的常用方法。
第一个要求将repo克隆到web服务器的文档根目录中,并在更新后的钩子中使用 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很容易解决。
在最佳实践方面,一种方法客观上比另一种方法更好吗?我缺少哪些其他优点和缺点?
答案 0 :(得分:4)
在发布管理(此处为部署)方面,最好有一个独立于发布机制的目标环境。
换句话说,第二个解决方案(checkout -f
)将修改一个普通的Web目录结构,而不包含任何其他不属于它的子目录(如.git
文件夹)。
例如,我在“using git to deploy my node.js app to my production server”中使用它。
最大限度地减少任何副作用,使生产环境能够正常运行,无干扰。