使用'git pull'与'git checkout -f'进行网站部署

Mic*_*lle 11 git web-deployment

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

第一个要求将repo克隆到web服务器的文档根目录中,并且在更新后的钩子中使用git pull.

cd /srv/www/siteA/ || exit
unset GIT_DIR
git pull hub master
Run Code Online (Sandbox Code Playgroud)

第二种方法将"分离的工作树"添加到裸存储库中.post-receive钩子使用git checkout -f将存储库的HEAD复制到工作目录,即webservers文档根目录,即

GIT_WORK_TREE=/srv/www/siteA/ git checkout -f
Run Code Online (Sandbox Code Playgroud)

第一种方法的优点是可以提交网站工作目录中的更改并将其推送回裸存储库(但不应在实时服务器上更新文件).第二种方法的优点是git目录不在文档根目录中,但使用htaccess可以很容易地解决这个问题.

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

Von*_*onC 4

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

这可以最大限度地减少任何副作用,并允许生产环境仅按其运行所需进行工作,而不会受到干扰。

  • @Michelle简单地说,在发布管理方面,您尝试对生产平台上放置/部署/管理的内容进行严格控制:它应该只是*运行*应用程序所需的内容,而不是其他任何内容,而不是一个额外的工具(git)。也就是说,这是“一般最佳实践”,而不是绝对规则,并且在您的环境中,您完全可以将 git 存储库直接保留在您的产品平台上。 (2认同)