2012-10-07 146 views
8

我发现了两种常用的方法来使用裸露远程回购自动部署网站更新。使用'git pull'和'git checkout -f'进行网站部署

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

cd /srv/www/siteA/ || exit 
unset GIT_DIR 
git pull hub master 

第二种方法是在裸仓库中添加一个“分离的工作树”。后收到钩使用git的结帐-f复制存储库的HEAD到工作目录是在Web服务器文档根即

GIT_WORK_TREE=/srv/www/siteA/ git checkout -f 

第一种方法有改变了网站制作工作目录可以优势承诺并推回到裸露的回购站(但不应在活动服务器上更新文件)。第二种方法的优点是,git目录不在文档根目录内,但这很容易使用htaccess解决。

就最佳实践而言,其中一种方法客观上比另一种更好吗?我缺少什么其他优点和缺点?

回答

4

在发布管理(这里是部署)方面,最好有一个独立于发布机制的目标环境。
换句话说,第二个解决方案(checkout -f)将修改一个普通的网络目录结构,不包含任何不应该包含其他子目录的子目录(如.git文件夹)。
我使用它,例如,在“using git to deploy my node.js app to my production server”中。

最大限度地减少了任何副作用,并使生产环境能够正常运行而不受干扰。

+0

我不清楚什么是没有“独立于发布机制的目标环境”的风险/缺点。我所能想到的就是你所提到的.git文件夹,它可以使用必要的.htaccess规则轻松缓解。我错过了什么?任何建议非常感谢。 – Michelle

+2

@Michelle简单地说,就发布管理而言,您试图强制严格控制在生产平台上放置/部署/管理的内容:应该只是*运行*应用程序所需的内容,而不是其他内容,不是一个额外的工具(混帐)。也就是说,这是“一般的最佳实践”,并非绝对的规则,在您的情况下,您完全可以将git回购直接保存在您的prod平台上。 – VonC