12

我发现了两种使用裸远程仓库自动部署网站更新的常用方法。

第一个要求将 repo 克隆到网络服务器的文档根目录中,并在更新后挂钩中使用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 解决。

就最佳实践而言,一种方法客观上是否优于另一种方法?我还缺少哪些其他优点和缺点?

4

1 回答 1

4

在发布管理(这里是部署)方面,最好有一个独立于发布机制的目标环境。
换句话说,第二个解决方案 ( checkout -f) 将修改一个普通的 web 目录结构,没有任何其他不应该成为它的一部分的子目录(如.git文件夹)。
例如,我在“使用 git 将我的 node.js 应用程序部署到我的生产服务器”中使用它。

这最大限度地减少了任何副作用,并允许生产环境使用它需要运行的东西,而不会受到干扰。

于 2012-10-07T12:04:20.887 回答